【问题标题】:JavaScript regular expression "Nothing to repeat" errorJavaScript 正则表达式“无需重复”错误
【发布时间】:2012-05-18 09:55:16
【问题描述】:

我在尝试获取令牌以对 Minic 语言进行词法分析时遇到此错误!

document.writeln("1,2 3=()9$86,7".split(/,| |=|$|/));

document.writeln("<br>");
document.writeln("int sum ( int x , int y ) { int z = x + y ; }");
document.writeln("<br>");
document.writeln("int sum ( int x , int y ) { int z = x + y ; }".split(/,|*|-|+|=|<|>|!|&|,|/));

最后一行的调试器出现错误 Uncaught SyntaxError: Invalid regular expression: Nothing to repeat !!

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    你需要转义特殊字符:

    /,|\*|-|\+|=|<|>|!|&|,|/
    

    See需要转义哪些特殊字符:

    【讨论】:

    • - 不是特殊字符,除非在[] 中使用的位置不是第一个/最后一个字符。
    【解决方案2】:

    您需要对字符 +* 进行转义,因为它们在正则表达式中具有特殊含义。我也非常怀疑您是否想要最后一个 | - 这会将空字符串添加到匹配的元素中,因此您会得到一个每个元素一个字符的数组。

    这是固定的正则表达式:

    /\*|-|\+|=|<|>|!|&|,/
    

    但是,您可以通过使用字符类使其更具可读性甚至更快:

    /[-,*+=<>!&]/
    

    演示:

    js> "int sum ( int x , int y ) { int z = x + y ; }".split(/[-,*+=<>!&]/);
    [ 'int sum ( int x ',
      ' int y ) { int z ',
      ' x ',
      ' y ; }' ]
    

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 2020-08-23
      • 2013-10-05
      • 1970-01-01
      • 2015-10-01
      相关资源
      最近更新 更多