SyntaxError:无效的正则表达式:无需重复

时间:2017-12-09 08:26:55

标签: javascript regex

当我使用javascript写正则表达式。

var regex = new RegExp("^[ ]{"+p1.length+"}\* ([^\n]*)", "gm")  

顺便说一句,我有alert(p1.length)

它的value 0

我收到了错误:

  

SyntaxError:无效的正则表达式:无需重复

为什么?

这是同样的错误

        var regex = new RegExp("^ {"+p1.length+"}\* ([^\n]*)", "gm")

但这是对的:

var r="^ {"+p1.length+"}[0-9]+\. ([^\n]*)"
            var regex = new RegExp(r, "gm")             

我的问题是为什么???

   var regex = new RegExp("^ {"+p1.length+"}[*] ([^\n]*)", "gm")        //this is ok
   var regex = new RegExp("^ {"+p1.length+"}\\* ([^\n]*)", "gm")        //and this is ok too. 

所以当我们使用字符串构建一个正则表达式时,我们需要加倍\\它就是这样的技巧。

  

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

     

{n}匹配前面表达式的n次出现。 N必须是正整数。   例如,/ a {2} /不匹配' a' in" candy,"但它确实匹配了所有的" caandy,"和前两个人在" caaandy。"

所以我的使用{0}是对的,没问题。 问题是我们需要\\在字符串中构建正则表达式,就像@Andreas说的那样,谢谢。

1 个答案:

答案 0 :(得分:3)

首先,你没有逃脱你的正则表达。你应该这样做......

你的2个错误的正则表达式有两个不同的错误。

您的第一个尝试用“0次或更多次”来量化[ ]{0}

[ ]{0}重复100或1000或多次仍然是空字符串。这意味着正则表达式永远不会停止匹配,如果这是有效的,因为它不会继续匹配[ ]{0}*之后的任何其他字符。

你的第二个正则表达式试图重复^ 0次。

^不是一个字符,它只是一个零宽度的位置 - 字符串的开头。像\b这样的其他“位置”也是如此。彼此相邻的字符串不能有2个“开始”。

我现在将解释为什么编辑中的两个正则表达式有效。

[*]是一个字符类。在一个字符类中,*失去了“零次或多次”的含义,变成了字面意思。所以你只是在没有空格后匹配字符*

\\*未转义只是\*。这里*再次失去意义,因为它是在反斜杠之后。