10

正则表达式是即时构建的,但我已将其输出到萤火虫:

(.{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");
4

2 回答 2

14

问题是 +,它是你需要转义的量词。

改用这个:

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

或在字符串内:

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

如果要匹配文字 $ 后跟换行符,则需要使用 $ 转义\(或\\在字符串内 - 请参阅我在此下方的最后一条评论以获取解释)。

这是关于量词的一些信息。

于 2010-09-14T22:12:20.460 回答
3

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

当你得到一个关于非法量词的错误时,它几乎总是意味着你有一个不属于它的量词。例如,由于它们的意思是“多少”,它们显然必须指代某物。如果您将一个放在模式或组的开头,则正则表达式会考虑“有多少 _of 什么?

在您的特定情况下,您在分组字符“(”之后立即有一个“+”,这就是您收到错误的原因。您需要转义“+”以便它不被视为量词或放置一些字符或组你想在它前面匹配。在你的情况下,如果你试图匹配一个实际的“+”字符,它可能是第一个。

于 2010-09-14T22:26:50.623 回答