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

标签 javascript regex

我有这个简单的正则表达式,它应该匹配任何数字和“+”符号

/^[\d\+]+$/g

它的作用是这样的:

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

这让我发疯!

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

最佳答案

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

  1. 您正在使用 RegExp 原型(prototype)的 test() 方法,而不是 match() 方法 字符串-原型(prototype)。
  2. 您的模式存储在一个变量中,您可以在多次调用 test() 方法时重复使用它。

乍一看,结果有些出乎意料,但我会尽力解释发生了什么。

您的 RegExp 将 global-Flag 设置为 true。这会导致对 test() 方法的后续调用超出先前的匹配项,如所述 here 。这本质上意味着,在计算第一个正则表达式并找到匹配项后,该匹配项的索引将存储到 RegExp 对象中,下一个匹配项将从该索引处开始,省略一些字符一开始。如需更深入的解释,我建议阅读 this thread .

这并不是你真正想要的,对吧?我的快速建议是简单地删除全局标志,因为从我的 Angular 来看,您并不真正需要它。如果您想确保正则表达式仅匹配完整字符串而不是子字符串,请使用 ^$ 元字符(就像您已经做的那样)。

<小时/>

编辑:

如果您确实需要全局标志,请尝试使用 String 原型(prototype)的 match() 方法,因为它不会超越之前的匹配。相反,它使用前进功能并捕获所有匹配项,然后重置索引。

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

关于javascript - 我的简单正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21498753/

相关文章:

javascript - Next.js Jest 28 - 无法转换 SVG 文件

c# - 使用正则表达式删除字典条目

html - 在 Visual Studio 2013 或 2010 中查找并替换多行

Perl 正则表达式的 Python 版本

Java - 如何测试一个字符串是否同时包含字母和数字

javascript - Node Js : Test to see if a file is locked for editing by another process

javascript - 为什么 event.target.value 只捕获字符串输入中的第一个字母

javascript - 使用 Javascript 播放和暂停图像

javascript - 如何在内容之后加载广告?

Python文件重命名语法错误