当我创建一个RegEx实例时,为什么angular会抛出异常“意外的量词”?

时间:2013-12-10 21:00:27

标签: regex angularjs

如果我尝试在我的代码中的任何地方创建正则表达式会引发错误“意外的量词”?为什么?这个正则表达式是有效的,经过测试并且有效但是如果我尝试

var p = new RegExp("^(.{1,19}\*|\*.{1,19}|(?!\*).{1,20})$");

angular会抛出错误。然而,这个简单的虚拟正则表达式不会。

var pattern = new RegExp("^(.)$");

这让我相信这是逃避角色或其他事情的问题?

2 个答案:

答案 0 :(得分:3)

你需要在正则表达式中转义反斜杠:

new RegExp("^(.{1,19}\\*|\\*.{1,19}|(?!\\*).{1,20})$");

此代码将引发异常:

new RegExp("\*.");
// SyntaxError: Invalid regular expression: /*./: Nothing to repeat

因为字符串的计算结果为

"*."

*量词之前没有字符类,因此表达式无效。

答案 1 :(得分:1)

首先,这是一个JavaScript错误,而不是由角度框架产生的错误。您提供的正则表达式无效,如错误消息所述。具体来说,您需要在字符串文字中转义反斜杠。您当前的表达式评估为:

^(.{1,19}*|*.{1,19}|(?!*).{1,20})$

你可能想要的是:

var p = new RegExp("^(.{1,19}\\*|\\*.{1,19}|(?!\\*).{1,20})$");

导致以下正则表达式:

^(.{1,19}\*|\*.{1,19}|(?!\*).{1,20})$