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

时间:2010-09-14 22:09:08

标签: javascript regex quantifiers

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

(.{1,38})(+|$\n?)

错误是

invalid quantifier +|$\n?)

我不知道从哪里开始。

实际代码是:

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

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

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

Firebug仍告诉我:

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

另一个更新 看起来我不得不双击它,这解决了问题!

最终代码

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

2 个答案:

答案 0 :(得分:12)

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

请改用:

/(.{1,38})(\+|$\n?)/

或在字符串中:

"(.{1,38})(\\+|$\\n?)"

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

这里有一些information on quantifiers

答案 1 :(得分:3)

量词意味着“多少”。最常见的是“*”,表示零或更多。量词“+”表示一个或多个。

当你收到关于非法量词的错误时,它几乎总是意味着你有一个不属于它的量词。例如,因为他们的意思是“多少”,他们显然必须提到某些东西。如果你在一个模式或小组的开头放置一个,正则表达式正在考虑“多少_of what?

在你的特定情况下,你在分组字符后面紧跟“+”“(”这就是你得到错误的原因。你需要逃避“+”所以它不被视为量词或者放一些你要在它前面匹配的字符或组。在你的情况下,如果你试图匹配一个真正的“+”字符,它可能是第一个。