JavaScript:正则表达式中的量词无效
正则表达式是动态构造的,但我已将其输出到firebug:JavaScript:正则表达式中的量词无效,javascript,regex,quantifiers,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 + "})(
(.{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");
另一次更新
看来我必须把它加倍,这就解决了问题
最终代码
问题是+,这是一个需要转义的量词 改用这个:
/(.{1,38})(\+|$\n?)/
或在字符串中:
"(.{1,38})(\\+|$\\n?)"
如果要匹配后跟换行符的文字$,则需要使用\
(或\\
在字符串中转义$,有关解释,请参阅下面的最后一条注释)
这里有一些。量词的意思是“多少”。最常见的是“*”表示零或更多。量词“+”表示一个或多个
当你得到一个非法量词的错误时,它几乎总是意味着你有一个不属于它的量词。例如,因为它们的意思是“多少”,所以它们显然是指某个东西。如果你把一个放在一个模式或组的开头,正则表达式会想“什么有多少
在您的特定情况下,分组字符“”后面紧跟着一个“+”(“这就是出现错误的原因。您需要对“+”进行转义,这样它就不会被视为量词,或者在它前面放一些您想要匹配的字符或组。在您的情况下,如果您试图匹配一个实际字符,它可能是第一个”+“character.\n将在字符串中插入一个换行符。请尝试\\n将其转义。在代码中,它是\\n Firebug将其显示为一个斜杠。量词表示“我试图匹配的数量”,其中“+”是一个。其他的是*,?”,并且{n,m}也需要将$转义,如果它不打算匹配行的结尾,则它似乎不匹配,因为他有(可能是多余的)“\n”。如果他希望它与实际字符$\n匹配,最好根据他添加的代码使用\$$,看起来他试图匹配行尾并使用换行符(使用多行修改器)那么,根据我上面的最后一段代码,$前面的斜杠需要吗?我看到你从你的示例中去掉了它。这取决于你想匹配什么,如果它是行的结尾,那么你不需要转义它。如果你想匹配文字字符'$',那么你需要。因为你在字符串中编写正则表达式,哟你必须加倍使用反斜杠,因为反斜杠在字符串中有特殊含义,即需要一个反斜杠来转义正则表达式中的特殊字符,一个反斜杠来转义字符串中的斜杠。
"(.{1,38})(\\+|$\\n?)"