返回課程

尋找程式語言

有很多程式語言,例如 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

正規表示法引擎會逐一尋找交替。也就是說:它會先檢查我們是否有 Java,否則會尋找 JavaScript,以此類推。

因此,永遠找不到 JavaScript,只因為 Java 會先被檢查。

對於 CC++ 也是一樣。

這個問題有兩個解決方案

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