RegEx:仅捕获捕获组的内部

时间:2014-02-18 03:16:47

标签: regex

在以下字符串中,我想只匹配10.00

Test(+$15.00)(dsfa) (+$10.00)

现在我有:

\([\+|\-]\$(?:[0-9\.]+?)\)$

但它捕获(+ $ 10.00),我想只拥有捕获组的内部。

编辑: 我正在使用JS

2 个答案:

答案 0 :(得分:4)

问题是你没有在你的模式中定义一个捕获组,你只有完全不同的文字括号。这将为您提供使用简单括号(...) 定义的捕获组1 中的结果:

\([+-]\$([0-9.]+)\)$

(请注意,不需要转义多个字符,特别是所有特殊字符都被视为字符类中的文字。)

在先例模式中,我使用捕获组从整个结果中提取我想要的内容。通过使用lookarounds(使用支持外观的正则表达式引擎),可以仅获得您想要的整个结果:

(?<=\([+-]\$)[0-9.]+(?=\)$) 

答案 1 :(得分:1)

使用捕获组时,JavaScript很容易。测试函数的返回值将是一个数组,其中元素0是完全捕获,元素1是目标结果。

str = "Test(+$15.00)(dsfa) (+$10.00)"
matches = str.match(/(?:[+-]\$)(\d+\.\d\d)(?:\))$/)
result = matches[1]

matches此处为["+$10.00)", "10.00"]result"10.00"