Найдите языки программирования
Существует много языков программирования, например, Java, JavaScript, PHP, C, C++.
Напишите регулярное выражение, которое найдёт их все в строке Java JavaScript PHP C++ C
:
let regexp = /ваше регулярное выражение/флаги;
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++