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

Различие между "[^"]*" и ".*?"

Регулярные выражения "[^"]*" и ".*?" – при выполнении одинаковы?

Иначе говоря, существует ли такая строка, на которой они дадут разные результаты? Если да – дайте такую строку.

Они очень похожи и, да, почти одинаковы. Оба ищут от одной кавычки до другой.

Различие здесь в символе точка '.'. Как мы помним, точка '.' обозначает любой символ, кроме перевода строки.

А [^"] – это *любой символ, кроме кавычки '"'.

Получается, что первый регэксп "[^"]*" найдёт закавыченные строки с \n внутри, а второй регэксп ".*?" – нет.

Вот пример:

alert( '"многострочный \n текст"'.match(/"[^"]*"/) ); // найдёт

alert( '"многострочный \n текст"'.match(/".*?"/) ); // null (нет совпадений)