尋找程式語言
有很多程式語言,例如 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
會先被檢查。
對於 C
和 C++
也是一樣。
這個問題有兩個解決方案
- 變更順序,先檢查較長的比對:
JavaScript|Java|C\+\+|C|PHP
。 - 合併開頭相同的變體:
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++