レッスンに戻る

プログラミング言語を検索

たとえば、Java、JavaScript、PHP、C、C++ など、多くのプログラミング言語があります。

文字列 「Java JavaScript PHP C++ C」 に含まれるプログラミング言語を検索する正規表現を作成してください。

let regexp = /your regexp/g;

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

最初のアイデアとしては、| を間にはさんで言語を並べることができます。

しかし、これは正しく機能しません。

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

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

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

正規表現エンジンは、交互性を 1 つずつ検索します。つまり、最初に Java があるかどうかを確認し、見つからなければ JavaScript を探し、そのように続けていきます。

その結果、最初に Java がチェックされるため、JavaScript は見つかることはありません。

CC++ も同様です。

この問題には 2 つの解決策があります。

  1. より長い一致を最初にチェックするように順序を変更します: JavaScript|Java|C\+\+|C|PHP
  2. 開始位置が同じバリアントをマージします: Java(Script)?|C(\+\+)?|PHP

アクション中

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

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

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