プログラミング言語を見つける
多くのプログラミング言語があります。例えば 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
が最初にチェックされるからです。
C
と C++
も同じです。
この問題には2つの解法があります:
- より長いマッチを最初にチェックするよう順番を変更する:
JavaScript|Java|C\+\+|C|PHP
. - 同じスタートのバリアントをマージする:
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++