我的简单正则表达式不起作用



我有这个简单的正则义务,应该匹配任何数字和' '符号

/^[d+]+$/g

它的作用是:

1  => true
11 => false
11+11 => true
1+1 => false

这让我发疯!

(如果重要的话,我正在使用JavaScript)

重现您的错误时我做过的一些假设:

  1. 您使用的是RegExp -Prototype的test() -Method,而不是String -Prototype的match() -Method。
  2. 您的模式存储在变量中,您可以通过多个呼叫test() -Method将其重复使用。

乍一看,结果有些出乎意料,但是我会尝试解释发生的事情。

您的REGEXP具有将全球范围设置为true。如下所述,这会导致随后的呼叫test() -Method推进过去的比赛。本质上,这意味着在评估了第一个正则表达式并找到匹配项后,该匹配的索引存储在RegExp -Object中,下一场比赛将以该索引开始,在开始时省略了一些字符。要进行更深入的解释,我建议阅读此线程。

这不是您想要的,对吗?我的快速建议是简单地删除global-flag ,因为从我的角度来看,您并不需要它。如果您想确保正则表达式仅与完整的字符串相匹配而不是子字符串,请使用^$ Metacharacters(如您已经一样)。


编辑:

如果您确实需要全局范围,请尝试使用String -Prototype的match() -Method,因为它不会超过以前的匹配。相反,它使用了前进的功能并捕获所有匹配项,然后重置索引。

var pattern = /^[d+]+$/g;
"1".match(pattern); // => true
"11+11".match(pattern); // => true
"1+1abc".match(pattern); // => false

相关内容

最新更新