2012-05-18 28 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 ; }' ]