我想尝试提取此字符串中的最后下载速度。我知道它后面是一个摘要。
这是我目前的正则表达式:
/.*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
使用积极的前瞻来匹配摘要之前的最后一个文件大小。
(?=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 成为匹配的一部分。正前瞻构造是一对括号,左括号后跟问号和等号。— (来源(
您的正则表达式中存在一些问题。这是一个固定的:
/s(d+.d+s+(kB|MB|GB)/s)[snr]+SUMMARY/
var str = document.querySelector("pre").textContent;
console.log(str.match(/s(d+.d+s+(?:kB|MB|GB)/s)[snr]+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]
。 - 没有理由让
.*
结束
您是否尝试过将第一个.*替换为.*?
,将第二个.*替换为[sS].*
?这应该适用于多行匹配。
尝试:/\d+
.\d+\s[MGK]B/s\SUMMARY/- 在"SUMMARY"之前有两个换行符。