【问题标题】:Invalid regular expression, Invalid group Javascript Regex无效的正则表达式,无效的组 Javascript Regex
【发布时间】:2022-01-25 10:14:26
【问题描述】:

我有一个基于正则表达式检查 falseNumber 的 C# 代码:

public bool falseNumber(string num)
    {
        try
        {
            num = num.Replace("-", "");
            string re = @"(?x)
            ^
            # fail if...
            (?!
                # repeating numbers
                (\d) \1+ $
                |
                # sequential ascending
                (?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){5} \d $
                |
                # sequential descending
                (?:0(?=9)|1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5} \d $
            )
            # match any other combinations of 6 digits
            \d+
            $
        ";
            return Regex.IsMatch(num, re);
        }
        catch (Exception y) { return true; }
    }

我需要把这段代码转成JS,所以写了:

const falseNumber = (num) =>
{
  num = num.replaceAll("-", "");
  let re = /(?x)^(?!(\d)\1+$|(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){5}\d$|(?:0(?=9)|1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5}\d$)\d+$/
  return re.test(num);
}

但这给了我错误:

VM46:5 Uncaught SyntaxError: 无效的正则表达式: /((?x)^(?!(\d) \1+ $|(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(? =7)|7(?=8)|8(?=9)|9(?=0)){5} \d $|(?:0(?=9)|1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(? =5)|7(?=6)|8(?=7)|9(?=8)){5} \d $)\d+$)/: 无效组 在 falseNumber (:5:12) 在:1:1

任何帮助将不胜感激。

谢谢。

const falseNumber = (num) =>
{
  num = num.replaceAll("-", "");
  let re = /(?x)^(?!(\d)\1+$|(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){5}\d$|(?:0(?=9)|1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5}\d$)\d+$/
  return re.test(num);
}


console.log(falseNumber('33-3333333-33'));

【问题讨论】:

    标签: javascript c# regex


    【解决方案1】:

    x 修饰符未内置在 JS 中,这就是您收到错误的原因。在您的情况下,您不需要使用 x 修饰符,因为您在 JS 的正则表达式中不使用 cmets 或有任何空格。

    x修饰符定义:

    此标志告诉引擎忽略所有空格并允许 正则表达式中的 cmets;也称为冗长。评论由 一个开始的“#”字符。如果您需要在其中包含空格字符 你的正则表达式,它现在必须被转义 '\'。

    const falseNumber = (num) =>
    {
      num = num.replaceAll("-", "");
      let re = /^(?!(\d)\1+$|(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){5}\d$|(?:0(?=9)|1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8)){5}\d$)\d+$/
      return re.test(num);
    }
    
    
    console.log(falseNumber('33-3333333-33'));

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 2023-03-06
      • 2011-05-11
      • 1970-01-01
      • 2011-08-09
      相关资源
      最近更新 更多