Регулярное выражение
var re = /"(\\.|[^"\\])*?"/i; console.log( '"Скажи \\"Привет\\"!"'.match(re) ); Я чет не могу понять это регулярное выражение. Сначала ищется кавычка ("), после кавычки должен быть обратный слэш (\) и любой символ, кроме перевода строки. Или любой символ кроме кавычки (") и слэша (\). И к этой группе добавляется квантификатор (*) - ноль или более символов без жадности. И затем вторая кавычка ("). Что получается? Кавычка совпадает сразу, затем вот это (\\.) отпадает, т.к после кавычки идут буквы. Получается, что регэксп начинает искать (^"\\)*?. А в середине строки встречаются слэши (\). Получается, что должно быть только совпадение подстроки "!"? Но почему то совпадает вся строка. |
Действия нашей машины. Прошли ", далее, все символы, включая пробел из <Cкажи >удовлетворяет <[^"\\]>. Далее. подстрока <\\"> удовлетворяет <\\.>(обратный слэш и любой символ кроме перевода строки). C <Привет> то же самое что и с <Скажи >. <\\"> -- см выше. <!> попадает под <[^"\\]> дальше совпадения для <\\.|[^"\\]> заканчиваются. Последний символ <"> попадает под <">.
Вроде как-то так. Ограничитель ? выглядит как лишний. Модификатор i -- точно лишний. |
Цитата:
|
alert( "****\\****".match(/\\/)[0] ) |
Rise,
Чему Вы тут удивляетесь? Я не понял. Все правильно выводится. Выражение /\\\*/ означает <обратный слеш звездочка> |
Цитата:
Я бы Вам посоветовал прочитать что-нибудь по основам регулярных выражений. Бэкслеш перед метасимволом означает "интерпретировать метасимвол как обычный символ" |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Альтернативы обрабатываются слева направо до тех пор, пока не будет найдено соответствие. Изначально была найдена кавычка, а левая альтернатива не совпала ни с чем, т.к. после кавычки идут буквы. |
Decode,
Я не совсем понял, о чем вы говорите. Суть в том, что все подстроки между кавычками в вашей строке подпадают под шаблон <\\.|[^"\\]>, кавычки, соответственно, подпадают под шаблоны кавычек. Это ответ на ваш вопрос. Я все пошагово расписал, перечитате мой первый пост еще раз. |
Часовой пояс GMT +3, время: 14:54. |