レッスンに戻る

プログラミング言語を見つける

多くのプログラミング言語があります。例えば Java, JavaScript, PHP, C, C++。

文字列 Java JavaScript PHP C++ C からそれらを見つける正規表現を作成してください:

let reg = /your regexp/g;

alert("Java JavaScript PHP C++ C".match(reg)); // Java JavaScript PHP C++ C

最初のアイデアは | の間に言語をリストすることです。

しかし、それは正しく動作しません:

let reg = /Java|JavaScript|PHP|C|C\+\+/g;

let str = "Java, JavaScript, PHP, C, C++";

alert( str.match(reg) ); // Java,Java,PHP,C,C

正規表現演算子は論理和指定子を1つずつ探します。つまり、まず Java があるかをチェックし、なければ JavaScript を探します。

結果として、JavaScript は見つかりません。Java が最初にチェックされるからです。

CC++ も同じです。

この問題には2つの解法があります:

  1. より長いマッチを最初にチェックするよう順番を変更する: JavaScript|Java|C\+\+|C|PHP.
  2. 同じスタートのバリアントをマージする: Java(Script)?|C(\+\+)?|PHP.

動作:

let reg = /Java(Script)?|C(\+\+)?|PHP/g;

let str = "Java, JavaScript, PHP, C, C++";

alert( str.match(reg) ); // Java,JavaScript,PHP,C,C++