如果我尝试在我的代码中的任何地方创建正则表达式会引发错误“意外的量词”?为什么?这个正则表达式是有效的,经过测试并且有效但是如果我尝试
var p = new RegExp("^(.{1,19}\*|\*.{1,19}|(?!\*).{1,20})$");
angular会抛出错误。然而,这个简单的虚拟正则表达式不会。
var pattern = new RegExp("^(.)$");
这让我相信这是逃避角色或其他事情的问题?
答案 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})$