正则表达式是动态构建的,但我将它输出到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");
答案 0 :(得分:12)
问题是+,这是你需要逃避的量词。
请改用:
/(.{1,38})(\+|$\n?)/
或在字符串中:
"(.{1,38})(\\+|$\\n?)"
如果你想匹配文字$后跟一个换行符,你需要使用\
(或\\
字符串中的$转义$ - 请参阅我在下面的最后评论以获得解释)。
答案 1 :(得分:3)
量词意味着“多少”。最常见的是“*”,表示零或更多。量词“+”表示一个或多个。
当你收到关于非法量词的错误时,它几乎总是意味着你有一个不属于它的量词。例如,因为他们的意思是“多少”,他们显然必须提到某些东西。如果你在一个模式或小组的开头放置一个,正则表达式正在考虑“多少_of what?
在你的特定情况下,你在分组字符后面紧跟“+”“(”这就是你得到错误的原因。你需要逃避“+”所以它不被视为量词或者放一些你要在它前面匹配的字符或组。在你的情况下,如果你试图匹配一个真正的“+”字符,它可能是第一个。