Вернуться к уроку

Найдите языки программирования

Существует много языков программирования, например Java, JavaScript, PHP, C, C++.

Напишите регулярное выражение, которое найдёт их все в строке «Java JavaScript PHP C++ C»

Сначала неправильный способ.

Если перечислить языки один за другим через |, то получится совсем не то:

var reg = /Java|JavaScript|PHP|C|C\+\+/g;

var str = "Java, JavaScript, PHP, C, C++";

alert( str.match(reg) ); // Java,Java,PHP,C,C

Как видно, движок регулярных выражений ищет альтернации в порядке их перечисления. То есть, он сначала смотрит, есть ли Java, а если нет – ищет JavaScript.

Естественно, при этом JavaScript не будет найдено никогда.

То же самое – с языками C и C++.

Есть два решения проблемы:

  1. Поменять порядок, чтобы более длинное совпадение проверялось первым: JavaScript|Java|C\+\+|C|PHP.
  2. Соединить длинный вариант с коротким: Java(Script)?|C(\+\+)?|PHP.

В действии:

var reg = /Java(Script)?|C(\+\+)?|PHP/g;

var str = "Java, JavaScript, PHP, C, C++";

alert( str.match(reg) ); // Java,JavaScript,PHP,C,C++