3

Minic langauge の字句解析を行うコードのトークンを取得しようとしているときに、このエラーが発生しました。

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 !!

4

2 に答える 2

6

特殊文字をエスケープする必要があります:

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

エスケープする必要がある特殊文字を確認します

于 2012-05-18T09:57:00.363 に答える
4

+文字をエスケープする必要があります*。正規表現では特別な意味があるためです。また、最後のものが必要かどうかも非常に疑わしいです。|これにより、一致した要素に空の文字列が追加されるため、要素ごとに1文字の配列が得られます。

固定正規表現は次のとおりです。

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

ただし、文字クラスを使用することで、読みやすく、さらに高速にすることができます。

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

デモ:

js> "int sum ( int x , int y ) { int z = x + y ; }".split(/[-,*+=<>!&]/);
[ 'int sum ( int x ',
  ' int y ) { int z ',
  ' x ',
  ' y ; }' ]
于 2012-05-18T09:59:11.183 に答える