2012-05-18 26 views
3

我试图获取令牌代码以对Minic语言进行词法分析时出现此错误!JavaScript正则表达式“无法重复”错误

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(/,|*|-|+|=|<|>|!|&|,|/)); 

我得到错误调试器上最后一行未捕获的SyntaxError:无效的正则表达式:没有重复!

回答

6

您需要特殊字符转义:

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

See什么特殊字符需要进行转义:

+0

'-'不是一个特殊字符,除非在不是第一个/最后一个字符的位置在[]中使用。 – ThiefMaster

+0

@ThiefMaster你说得对! – antyrat

3

您需要因为它们在正则表达式特殊的意义逃脱字符+*。我也非常怀疑你想要的最后一个| - 这会将空字符串添加到匹配的元素,因此你得到一个数组,每个元素只有一个字符。

这里是固定的正则表达式:

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

但是,可以使之更具可读性,甚至更快的利用文字类:

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

演示:

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