Можно ли заменить отрицательное «оглядывание» в регулярном выражении чем-то, что не использует упущение? - PullRequest
0 голосов
/ 28 октября 2019

У меня есть регулярное выражение, которое соответствует одному символу x, но не xx.

(?<!x)x(?!x)

Это прекрасно работает, проблема в том, что движок регулярных выражений в Firefox не поддерживает просмотр. (это ошибка )

Есть ли способ переписать это, чтобы он не использовал взгляд назад?

edit:

решение вДвойная ссылка в этом случае не работает. Если я заменю отрицательный взгляд на

(?!^x)x(?!x)

Он не будет совпадать правильно.

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Вы можете использовать группы без захвата:

(?:[^x]|^)(x)(?:[^x]|$)

Это означает, что мы ищем один символ "x" в некоторой строке. Да, регулярное выражение соответствует трем символам, но мы можем сослаться на совпадение x как $ 1.

1 голос
/ 29 октября 2019

Вот обходной путь:

^(?:^|[^x])x(?!x)

Демо

Это соответствует x, если ему предшествует начало строки или не-x

...