Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:正则表达式中的量词无效_Javascript_Regex_Quantifiers - Fatal编程技术网

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

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 + "})(

正则表达式是动态构造的,但我已将其输出到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"); 
另一次更新 看来我必须把它加倍,这就解决了问题

最终代码
问题是+,这是一个需要转义的量词

改用这个:

/(.{1,38})(\+|$\n?)/
或在字符串中:

"(.{1,38})(\\+|$\\n?)"
如果要匹配后跟换行符的文字$,则需要使用
\
(或
\\
在字符串中转义$,有关解释,请参阅下面的最后一条注释)

这里有一些。

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

当你得到一个非法量词的错误时,它几乎总是意味着你有一个不属于它的量词。例如,因为它们的意思是“多少”,所以它们显然是指某个东西。如果你把一个放在一个模式或组的开头,正则表达式会想“什么有多少


在您的特定情况下,分组字符“”后面紧跟着一个“+”(“这就是出现错误的原因。您需要对“+”进行转义,这样它就不会被视为量词,或者在它前面放一些您想要匹配的字符或组。在您的情况下,如果您试图匹配一个实际字符,它可能是第一个”+“character.

\n将在字符串中插入一个换行符。请尝试\\n将其转义。在代码中,它是\\n Firebug将其显示为一个斜杠。量词表示“我试图匹配的数量”,其中“+”是一个。其他的是*,?”,并且{n,m}也需要将$转义,如果它不打算匹配行的结尾,则它似乎不匹配,因为他有(可能是多余的)“\n”。如果他希望它与实际字符$\n匹配,最好根据他添加的代码使用\$$,看起来他试图匹配行尾并使用换行符(使用多行修改器)那么,根据我上面的最后一段代码,$前面的斜杠需要吗?我看到你从你的示例中去掉了它。这取决于你想匹配什么,如果它是行的结尾,那么你不需要转义它。如果你想匹配文字字符'$',那么你需要。因为你在字符串中编写正则表达式,哟你必须加倍使用反斜杠,因为反斜杠在字符串中有特殊含义,即需要一个反斜杠来转义正则表达式中的特殊字符,一个反斜杠来转义字符串中的斜杠。
"(.{1,38})(\\+|$\\n?)"