查找编程语言
有很多编程语言,例如 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++