2017-03-15 36 views
-2

我想嘗試提取此字符串中的最後一個下載速度。我知道它後面是摘要。RegEx無法正常工作。沒有匹配

這是我目前正則表達式:

/.*\s(\d+\.\d+\s[kB|MB|GB]\/s)\nSUMMARY.*/ 

這是字符串:

7% [###           ] ETA: 0:00:12 1.99 MB/s 
11% [#####           ] ETA: 0:00:08 2.87 MB/s 
16% [#######          ] ETA: 0:00:06 3.39 MB/s 
20% [#########          ] ETA: 0:00:05 4.04 MB/s 
24% [##########         ] ETA: 0:00:04 4.61 MB/s 
28% [#############         ] ETA: 0:00:03 5.41 MB/s 
32% [##############        ] ETA: 0:00:03 5.47 MB/s 
36% [################        ] ETA: 0:00:03 5.26 MB/s 
40% [##################       ] ETA: 0:00:02 5.26 MB/s 
44% [####################       ] ETA: 0:00:02 5.62 MB/s 
49% [######################      ] ETA: 0:00:02 5.88 MB/s 
53% [########################      ] ETA: 0:00:01 6.33 MB/s 
57% [#########################      ] ETA: 0:00:01 6.49 MB/s 
61% [###########################     ] ETA: 0:00:01 6.87 MB/s 
65% [#############################     ] ETA: 0:00:01 7.17 MB/s 
69% [###############################    ] ETA: 0:00:01 7.44 MB/s 
73% [#################################    ] ETA: 0:00:00 7.71 MB/s 
77% [##################################   ] ETA: 0:00:00 8.10 MB/s 
81% [####################################   ] ETA: 0:00:00 8.37 MB/s 
86% [######################################  ] ETA: 0:00:00 8.78 MB/s 
90% [########################################  ] ETA: 0:00:00 9.04 MB/s 
94% [########################################## ] ETA: 0:00:00 9.39 MB/s 
99% [############################################ ] ETA: 0:00:00 8.99 MB/s 
100% [#############################################] Time: 0:00:02 9.02 MB/s 

SUMMARY: [32mSuccessfully downloaded[0m: 1 
+1

使用'/(\ d + \ \ d + \ S(KB |。MB | GB)\ /秒)\ n \ S *內容/ .exec(S)[1]' –

+0

整個數組爲空。沒有任何匹配 – user3457598

+0

這意味着行結束符是CR或CRLF。嘗試'/(\ d + \。\ d + \ s(kB | MB | GB)\/s)(?:\ r \ n?| \ n)\ s * SUMMARY/.exec(s)[ –

回答

0

你的正則表達式有幾個問題。這裏有一個固定的一個:

/\s(\d+\.\d+\s+(kB|MB|GB)\/s)[\s\n\r]+SUMMARY/ 

var str = document.querySelector("pre").textContent; 
 
console.log(str.match(/\s(\d+\.\d+\s+(?:kB|MB|GB)\/s)[\s\n\r]+SUMMARY/));
<pre> 
 
7% [###           ] ETA: 0:00:10 2.27 MB/s 
 
11% [#####          ] ETA: 0:00:07 2.93 MB/s 
 
15% [#######          ] ETA: 0:00:05 3.73 MB/s 
 
19% [########          ] ETA: 0:00:04 4.34 MB/s 
 
23% [##########         ] ETA: 0:00:03 5.00 MB/s 
 
27% [############         ] ETA: 0:00:03 5.61 MB/s 
 
32% [##############        ] ETA: 0:00:03 5.56 MB/s 
 
36% [################        ] ETA: 0:00:02 5.77 MB/s 
 
40% [##################       ] ETA: 0:00:02 5.80 MB/s 
 
44% [####################       ] ETA: 0:00:02 6.00 MB/s 
 
48% [#####################      ] ETA: 0:00:02 6.34 MB/s 
 
52% [#######################      ] ETA: 0:00:01 6.74 MB/s 
 
56% [#########################     ] ETA: 0:00:01 7.01 MB/s 
 
60% [###########################     ] ETA: 0:00:01 7.30 MB/s 
 
64% [#############################    ] ETA: 0:00:01 7.69 MB/s 
 
68% [###############################    ] ETA: 0:00:01 8.11 MB/s 
 
73% [#################################   ] ETA: 0:00:00 8.50 MB/s 
 
77% [###################################   ] ETA: 0:00:00 8.75 MB/s 
 
82% [#####################################  ] ETA: 0:00:00 8.25 MB/s 
 
86% [#######################################  ] ETA: 0:00:00 8.53 MB/s 
 
91% [######################################### ] ETA: 0:00:00 8.89 MB/s 
 
95% [########################################## ] ETA: 0:00:00 9.09 MB/s 
 
99% [############################################ ] ETA: 0:00:00 9.10 MB/s 
 
100% [#############################################] Time: 0:00:02 9.11 MB/s 
 

 
SUMMARY: 
 
</pre>

需要注意的是:

  • 有不止一個新的生產線,這也是謹慎的,這裏不再排除其他種類的空間,並允許\r
  • 要做(A或B)你做(A|B),而不是[A|B]
  • 沒有理由有.*在兩端
+0

這個簡短而簡潔。謝謝! – user3457598

0

您是否嘗試過更換第一*與.*?和第二與[\s\S].*?這應該適用於多行匹配。

0

嘗試:/\d+.\d+\s[MGK]B/s\n\nSUMMARY/ - 有前「概要」兩個字符。

1

使用積極的預見來匹配摘要前的最後一個文件大小。

(?=\s+SUMMARY) 

注:不要忘記在表達式的末尾,以使與m標誌多行匹配。

var text = document.getElementById('progress-log').innerHTML.trim(); 
 
var regex = /\d+\.\d{2} [kMGTP]B\/s(?=\s+SUMMARY)/m; 
 

 
console.log('Final size:', text.match(regex)[0]);
.as-console-wrapper { top: 0; max-height: 100% !important; } 
 
#progress-log { display: none; }
<pre id="progress-log"> 
 
7% [###           ] ETA: 0:00:12 1.99 MB/s 
 
11% [#####           ] ETA: 0:00:08 2.87 MB/s 
 
16% [#######          ] ETA: 0:00:06 3.39 MB/s 
 
20% [#########          ] ETA: 0:00:05 4.04 MB/s 
 
24% [##########         ] ETA: 0:00:04 4.61 MB/s 
 
28% [#############         ] ETA: 0:00:03 5.41 MB/s 
 
32% [##############        ] ETA: 0:00:03 5.47 MB/s 
 
36% [################        ] ETA: 0:00:03 5.26 MB/s 
 
40% [##################       ] ETA: 0:00:02 5.26 MB/s 
 
44% [####################       ] ETA: 0:00:02 5.62 MB/s 
 
49% [######################      ] ETA: 0:00:02 5.88 MB/s 
 
53% [########################      ] ETA: 0:00:01 6.33 MB/s 
 
57% [#########################      ] ETA: 0:00:01 6.49 MB/s 
 
61% [###########################     ] ETA: 0:00:01 6.87 MB/s 
 
65% [#############################     ] ETA: 0:00:01 7.17 MB/s 
 
69% [###############################    ] ETA: 0:00:01 7.44 MB/s 
 
73% [#################################    ] ETA: 0:00:00 7.71 MB/s 
 
77% [##################################   ] ETA: 0:00:00 8.10 MB/s 
 
81% [####################################   ] ETA: 0:00:00 8.37 MB/s 
 
86% [######################################  ] ETA: 0:00:00 8.78 MB/s 
 
90% [########################################  ] ETA: 0:00:00 9.04 MB/s 
 
94% [########################################## ] ETA: 0:00:00 9.39 MB/s 
 
99% [############################################ ] ETA: 0:00:00 8.99 MB/s 
 
100% [#############################################] Time: 0:00:02 9.02 MB/s 
 

 
SUMMARY: [32mSuccessfully downloaded[0m: 1 
 
</pre>

正向前查找工作一樣的。 q(?= u)匹配一個跟隨着u的q,而不會使u的部分匹配。積極的超前結構是一對括號,開頭括號後面跟着一個問號和一個等號。 —(source

相關問題