我有一个类似于以下格式的字符串:
<pre>
===
RESULTS (means and 95% confidence intervals)
---
Total: 1607.3ms +/- 7.6%
---
3d: 82.7ms +/- 43.6%
cube: 38.1ms +/- 37.5%
</pre>
我希望输出如下: 总计:1607.3
我用过这样的话:
var reg = /\w.*:\D.*[ms]/gi
var result = "mytext".match(reg);
但如何避免“ms in last? 什么应该是正则表达式?
答案 0 :(得分:1)
我能想到的绝对简单解决方案是:
Total:.*(?=ms)
如果您的输出始终采用此格式,则上述正则表达式适用于您。
(?=ms)
被称为positive lookahead。在这种情况下,它正在寻找一个后跟 ms 的字符串,但不会在匹配中包含 ms 。
答案 1 :(得分:0)
这应匹配:Total: \d+\.\d+ms
\d+
匹配任意位数,\.
匹配小数点。
答案 2 :(得分:0)
捕获任何非“+
”的内容:
([^+]+)
答案 3 :(得分:0)
如果支持MULTILINE开关,则可以使用此正则表达式:
/^Total: *[^ ]+/m
在String#match
方法中。
答案 4 :(得分:0)
Total: [0-9]+(\.[0-9]{2})?
会工作。
答案 5 :(得分:0)
/Total:\s*\d+\.\d+(?=ms)/
应该为你做。
与提出的其他答案一样,总计:匹配文本。但是这种模式在“Total:”文本之后的空白空间方面提供了更大的灵活性,并且在小数点之前和之后的数字字符数量方面具有更大的灵活性。最后的正向前瞻匹配,但不包括“ms”文本。
<强>小提琴强>
http://refiddle.com/by/tim-schreiber/what-is-the-match-regex-for-string
希望这有帮助!