Как в JavaScript сделать регулярное вырожение соответствующее X, если перед X стоит Y?
/X(?=Y)/ соответствует X, eсли после X следует Y, а мне нужно чтобы Y было перед X. Т.е. Мне нужно такое регулярное выражение, которое соответствовало 'X' в строках "YX" или "abcYXde", но не соответствовало 'X' в строках "XY", "abYcXde" или "abXXY". Я думал, что таким регулярным вырожением будет \(?=Y)X\, но это почему-то не работает.
Ответы (1 шт):
Используйте блок предварительного просмотра назад — (?<=Y)X.
См. пример работы регулярного выражения.
"Положительный блок предварительного просмотра назад" находит позицию в строке, сразу перед которой имеется совпадение определённых в данном блоке последовательности шаблонов.
"Отрицательный (негативный) блок предварительного просмотра назад" находит позицию в строке, сразу перед которой НЕТ совпадения определённых в данном блоке последовательности шаблонов.
Это значит, что (?<=Y)X не найдёт совпадения в YabcX. (?<=Y.*?)X найдёт такое совпадние, но тут нужно учитывать тот факт, что не все библиотеки регулярных выражений поддерживают блоки предварительного просмотра назад с шаблонами неопределённой длины (с квантификаторами типа *, ?, {8,}, +). .NET, PyPi regex, JGSoft Sofware, JavaScript ECMAScript 2018 (см. таблицу совместимости) поддерживают такой синтаксис.