新的正则表达式 '^\+\d{2}\.\d{10}$' 不起作用。

3
我希望测试一个字符串的格式。这个字符串应该以一个+符号开头,然后是两个数字,接着是一个.符号,最后是10个数字。
/^\+\d{2}\.\d{10}$/.test('+34.2398320186');

这样操作是可行的(可以测试)。但是当我使用RegExp时,它会出现“无效量词”错误。这是怎么回事?
3个回答

9

您需要使用第二个\\转义\

new RegExp('^\\+\\d{2}\\.\\d{10}$'); // should work

我会添加一个建议,来自http://www.regular-expressions.info/javascript.html

建议不要在字面字符串中使用RegExp构造函数,因为在字面字符串中,必须转义反斜线。


4

由于您将正则表达式指定为字符串,因此您还需要转义'\',因为它也是字符串转义字符。所以您需要:

new RegExp('^\\+\\d{2}\\.\\d{10}$');

4
您可以尝试这个方法,如果您不想转义反斜杠。
var regex = /^\+\d{2}\.\d{10}$/ 
new RegExp(regex).test('+34.2398320186');

如果您想将字符串作为 RegExp 参数使用,则必须转义反斜杠。


考虑到您已经在第一行有一个正则表达式,为什么应该使用“构造函数”? - xanatos
@xanatos 我不确定 OP 在做什么,我只是指出当你使用那个特定的构造函数时它可以正常工作。 - user883499

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接