1

我有一个如下格式的字符串:

<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);

但是如何避免“最后一位女士?这应该是什么正则表达式?

4

6 回答 6

1

我能想到的绝对简单的解决方案是:

Total:.*(?=ms)

如果您的输出始终采用这种格式,则上述正则表达式应该适合您。

(?=ms)被称为积极前瞻。在这种情况下,它正在寻找一个后跟ms但不会在匹配中包含ms的字符串。

于 2013-10-18T14:24:03.513 回答
0

/Total:\s*\d+\.\d+(?=ms)/应该为你做。

与提出的其他答案一样, Total: 与文本匹配。但是这种模式在“Total:”文本之后的空白方面提供了更大的灵活性,并且在小数点前后的数字字符数量方面提供了更大的灵活性。最后的肯定前瞻匹配但不包括“ms”文本。

小提琴

http://refiddle.com/by/tim-schreiber/what-is-the-match-regex-for-string

希望这可以帮助!

于 2013-10-18T16:44:29.030 回答
0
Total: [0-9]+(\.[0-9]{2})?    

将工作。

于 2013-10-18T14:20:52.287 回答
0

这应该匹配:Total: \d+\.\d+ms

where\d+匹配任意位数,并\.匹配小数点。

于 2013-10-18T14:20:27.740 回答
0

捕获任何不是“ +”的东西:

([^+]+)
于 2013-10-18T14:20:39.413 回答
0

如果支持 MULTILINE 开关,那么您可以使用此正则表达式:

 /^Total: *[^ ]+/m

String#match方法。

于 2013-10-18T14:20:39.673 回答