Соответствие подстроки Regex в группе захвата - PullRequest
0 голосов
/ 04 марта 2019

У меня расширенный вопрос о регулярных выражениях (если я не переосмысливаю это).

С моими базовыми знаниями о регулярных выражениях легко сопоставить статическую группу захвата ниже в строке.

P(.): D:\1          

Правильно соответствует

Pb: Db
Pa: Da

и (правильно) не соответствует

Pa: D:b

Пока все хорошо.Тем не менее, мне нужно захватить набор [az] + после P и соответствовать одному символу.Чтобы они также соответствовали:

Pabc: D:c
Pabc: D:a
Pba: D:b
Pba: D:a

, но не

Pabc: D:x
Pba: D:g

Я начал идти по пути написания отдельных шаблонов, например, так (пробелы добавлены вокруг чередования для ясности):

P(.): D:\1 | P(.)(.): D:(\1|\2) | P(.)(.)(.): D:(\1|\2|\3) 

Но я не могу заставить даже это неуклюжее решение работать в Javascript Regex.

Есть ли элегантный, правильный способ сделать это?Можно ли это сделать с помощью ограниченного движка Javascript?

1 Ответ

0 голосов
/ 04 марта 2019

Следующее регулярное выражение сделает это:

P.*(.).*: D:\1

.*(.).* будет соответствовать одному или нескольким символам, захватывая один из них.

Если захваченный символ соответствует символу после D:, тогда регулярное выражение совпадает.

Если захваченный символ не совпадает, обратное отслеживание обеспечит повторную попытку с другим захваченным символом, пока все комбинации не будут опробованы.

См. regex101.com для работающего примера.

...