Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение (https://javascript.ru/forum/misc/56296-regulyarnoe-vyrazhenie.html)

sogoodweather 09.06.2015 19:26

Цитата:

Сообщение от Decode
Альтернативы обрабатываются слева направо до тех пор, пока не будет найдено соответствие.

Все верно. В вашем случае, когда машина доходит до \\" она проверяет первую альтернативу <\\.> она совпадает, остальное не проверяется, осуществляется переход к следующей позиции строки.

Decode 09.06.2015 19:47

sogoodweather, дак первая кавычка найдется сразу, затем первая альтернатива не совпадет, он переключится на вторую. Совпадение будет таким: "Скажи . Но потом идет слэш, а во второй альтернативе его не должно быть. Не совпадает. Дальше он так же должен пропустить "Привет, т.к. после него идет слэш. Получается, что в этой строке должна совпасть только подстрока "!".

sogoodweather 09.06.2015 20:52

Decode,
давайте еще раз, пошагово.
1 Кавычка совпала с шаблоном кавычки; переместились на следующую позицию; терерь у нас должно бытьсовпадение с шаблоном <\\.|[^"\\]> 0 или более раз.
2 Проверяем от текущей позиции (смотрим вперед). сопоставляем с первой веткой -- проверка провалилась. со второй веткой. Символ C соответствует второй ветке. Значит прибавляем C к уже найденному, перемещаемся на следующую позицию.

Шаг 2 повторяется до позиции перед \\" заглядываем вперед. \\" соответствует первой ветке. перемещаемся на позицию перед П. далее повторяется шаг 2 до позиции перед \\". подстрока \\" проходит по первой ветке условия. далее -- ! проходит по второй ветке. Далее сопоставление проваливается, переходим к следующему шаблону регулярки " ;сопоставление проходит, конец матчинга, бинго.

sogoodweather 09.06.2015 21:55

Rise,
Да, я забыл про ограничение. Но это сути поиска в данном случае не меняет, просто добавляет лишнюю проверку.


Часовой пояс GMT +3, время: 15:52.