(? =) не работал, я просто изменил свою позицию - PullRequest
0 голосов
/ 22 марта 2019

Мое регулярное выражение не было выполнено правильно.

Когда я меняю свою позицию, я получаю другие результаты.

"bbbWindows" - это не то, что я хотел.Почему не «bbb2222»?

'Windowsbbb'.replace(/Windows(?=bbb)/, '2222') // 2222bbb
'bbbWindows'.replace(/(?=bbb)Windows/, '2222') // bbbWindows

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Lookaheads ((?=...)) являются утверждениями нулевой длины.Они утверждают, что подстрока, следующая за этой позицией в исходной строке, должна соответствовать заданному шаблону.Другими словами,

/Windows(?=bbb)/

Будет соответствовать подстроке Windows, только если подстрока, следующая сразу за s, также соответствует шаблону bbb.С другой стороны,

/(?=bbb)Windows/

будет соответствовать подстроке Windows только в том случае, если подстрока, следующая непосредственно за начальной позицией исходного совпадения, также соответствует шаблону bbb - что невозможно, ни одна строка никогда не будет соответствоватьчто.

Самый простой способ заставить этот шаблон работать, это использовать обычную 'in-line' группу ((...)) и настроить строку замены, чтобы вставить эту подходящую подстроку в соответствующее место ($<em>N</em>).Например:

console.log('Windowsbbb'.replace(/Windows(bbb)/, '2222$1')) // 2222bbb
console.log('bbbWindows'.replace(/(bbb)Windows/, '$12222')) // bbb2222
0 голосов
/ 22 марта 2019

Вы должны использовать положительный вид сзади, когда заявленный шаблон находится за соответствующим шаблоном:

'bbbWindows'.replace(/(?<=bbb)Windows/, '2222')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...