正则表达式停止在特定字符处

时间:2014-08-28 14:03:52

标签: javascript regex

我正在使用以下javascript返回一个数组,其中包含在字符串

中找到的前两个数值
text.match(/(\d+)/g);

如果找到一个开括号,我怎么能停止搜索,而是返回NaN或零? 例如:

  • 10-20袋(+£1.50)将返回10和20
  • 20 +包(+£1.00)将返回20

3 个答案:

答案 0 :(得分:3)

在正则表达式中使用前瞻,以匹配第一个(之前的所有数字,

\d+(?=[^()]*\()

示例:

> "10-20 bags (+£1.50)".match(/\d+(?=[^()]*\()/g);
[ '10', '20' ]
> "20+ bags (+£1.00)".match(/\d+(?=[^()]*\()/g);
[ '20' ]

答案 1 :(得分:2)

您可以使用lookahead使用此正则表达式:

/(\d+)(?=.*\()/

RegEx Demo

此处(?=.*\()称为预测,如果后面没有开头\d+,则确保匹配(

答案 2 :(得分:0)

如果你真的需要你所要求的全部通用性 - 也就是说,如果匹配的行不一定只包含一个( - 那么我认为唯一的解决方案是首先匹配前导文本任何括号(即/^([^(]*)/),然后从中选择你的数字字符串。

Javascript正则表达式不支持lookbehind,这是您使用单个正则表达式指定的完全通用性所需的工作。