javascript - 语法错误 : Invalid regular expression: nothing to repeat

标签 javascript regex

当我使用 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/

相关文章:

javascript - angularJS 路由(没有错误)不工作

javascript - 单击加载页面之前显示加载

regex - 使用 sed 删除两个匹配模式之间的所有行

javascript - 用于获取 URL 中特定查询字符串变量的正则表达式

c# - 如何根据字母和数字在 C# 中拆分字符串

javascript - 当页面较小时使背景变大

javascript - node.js 机器人框架 universalbot beginDialogAction 用法?

javascript - 绝对路径问题drupal

ruby-on-rails - Rails number_to_percentage 和次奇怪的行为

java - 正则表达式 - 不允许字符序列