返回课程

查找编程语言

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