当我使用 javascript 编写正则表达式时。
var regex = new RegExp("^[ ]{"+p1.length+"}\* ([^\n]*)", "gm")
顺便说一句,我有alert(p1.length)
它是值 0
。
我得到了错误:
SyntaxError: Invalid regular expression: nothing to repeat
为什么?
这是同样的错误
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.
所以当我们使用 string 构建正则表达式时,我们需要 double\\它是如此技巧。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
{n} Matches exactly n occurrences of the preceding expression. N must be a positive integer. For example, /a{2}/ doesn't match the 'a' in "candy," but it does match all of the a's in "caandy," and the first two a's in "caaandy."
所以我使用 {0} 是正确的,没问题。 问题是我们需要字符串中的\\来构建正则表达式,就像@Andreas 说的那样,谢谢。
最佳答案
首先,您没有转义您的正则表达式。你可能应该这样做......
你的 2 个错误的正则表达式有 2 个不同的错误。
您的第一个尝试用“0 次或多次”量化 [ ]{0}
。
[ ]{0}
重复 100 次或 1000 次或多次后仍然是空字符串。这意味着如果这是有效的,正则表达式将永远不会停止匹配,因为它不会继续匹配 [ ]{0}*
之后的任何字符。
你的第二个正则表达式试图重复 ^
0 次。
^
不是字符,它只是一个零宽度位置 - 字符串的开头。其他“位置”也是如此,例如 \b
。一个字符串不能有 2 个相邻的“开头”。
我现在将解释为什么您的编辑中的两个正则表达式有效。
[*]
是一个字符类。在字符类中,*
失去了“零次或多次”的含义,变成了字面意思。所以你只是在没有空格之后匹配字符 *
。
\\*
未转义就是 \*
。这里 *
再次失去意义,因为它在反斜杠之后。
关于javascript - 语法错误 : Invalid regular expression: nothing to repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47726740/