JavaScript:正则表达式中的无效量词

Ste*_*hen 8 javascript regex quantifiers

正则表达式是动态构建的,但我将它输出到firebug:

(.{1,38})(+|$\n?)
Run Code Online (Sandbox Code Playgroud)

错误是

invalid quantifier +|$\n?)
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始.

实际代码是:

var re = top.RegExp;
var regex = new re("(.{1," + len + "})(+|$\\n?)", "gm");
Run Code Online (Sandbox Code Playgroud)

更新: 根据Bennor McCarthy的说明,我将代码更改为:

 var regex = new re("(.{1," + len + "})(\+|\$\\n?)", "gm");
Run Code Online (Sandbox Code Playgroud)

Firebug仍然告诉我这个:

invalid quantifier +|$\n?)
[Break on this error] var regex = new re("(.{1," + len + "})(\+|\$\\n?)", "gm"); 
Run Code Online (Sandbox Code Playgroud)

另一个更新 看起来像我必须加倍削减它,这解决了问题!

最终代码

var regex = new re("(.{1," + len + "})(\\+|\\$\\n?)", "gm");
Run Code Online (Sandbox Code Playgroud)

Ben*_*thy 12

问题是+,这是你需要逃避的量词.

请改用:

/(.{1,38})(\+|$\n?)/
Run Code Online (Sandbox Code Playgroud)

或在字符串内:

"(.{1,38})(\\+|$\\n?)"
Run Code Online (Sandbox Code Playgroud)

如果你想匹配文字$后面跟一个换行符,你需要转义$ with \(或\\在字符串中 - 请参阅我在下面的最后评论以获得解释).

这里有一些关于量词信息.

  • 也需要转义 $,如果它不意味着匹配行尾,这似乎并不匹配,因为他有(可能是多余的)'\n'。如果他想让它匹配实际的字符$\n,最好使用\$$ (2认同)