2016-02-02 3 views
1

Заявление о проблемах выглядит следующим образом.Неподдерживающее совпадение регулярных выражений lookbehind не работает

мое описание

а abcxxyz 10xabc abcx10 abc10xabc abcx10xyz

хочет регулярное выражение, которое будет соответствовать а, только если ему предшествует цифрой + х или наследовал й + цифра.

В приведенном выше примере он должен соответствовать abc из abcx10, 10xabc и abcx10xyz , но не должен записывать цифры в этих совпадениях. , что означает, что при замене текста он должен заменять только abcx или xabc.

Пробовали (((((?:\d+)))[Xx]))(abc)(\s|$|(([Xx](?=((\d).)+)))|[^a-zA-Z0-9]), но это не исключает цифры от захвата.

Спасибо.

+0

Пытались (((((?: \ D +))) [Xx])) (ABC) (\ s | $ | (([Xx] (? = ((\ d).) +))) | [^ a-zA-Z0-9]), но не исключает цифр от захвата. – phh

+0

В вашем шаблоне нет lookbehind. Начните удалять все бесполезные группы в вашем шаблоне, чтобы сделать его более понятным и более легким для отладки. Какой язык вы используете? –

ответ

0

Попробуйте это:

((?<=\d[Xx])abc)|(abc(?=[Xx]\d)) 

Demo here

Обратите внимание, что не может с просмотром назад у кванторов - он должен знать и определить длину.

Если вы хотите получить abcx и xabc, есть немного другая версия:

https://regex101.com/r/cD5hI6/2

+0

Если я хорошо понимаю, x должен быть включен в игру. Обратите внимание, что группы захвата могут не понадобиться, если цель должна быть заменена. –

+0

OP еще не сказал, какой вкус он использует. Некоторые * делают * позволяют кванторы в lookbehinds, а некоторые не поддерживают lookbehinds вообще. –

+0

Я знаю, что javascript этого не делает, но я надеюсь, что OP скажет, является ли это javascript. –

Смежные вопросы