查找编程语言
有许多编程语言,例如 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
正则表达式引擎查找选择模式的时是挨个查找的。意思是:它先匹配是否存在 Java
,否则 —— 接着匹配 JavaScript
及其后的字符串。
结果,JavaScript
永远匹配不到,因为 Java
先被匹配了。
C
和 C++
同理。
这个问题有两个解决办法:
- 变更匹配顺序,长的字符串优先匹配:
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++