Есть ли способ использовать выражение 'nth capturing group' (то есть '\ 1', '\ 2', '\ 3' и т. Д.) В виде регулярного выражения Lookbehind?
Примерно так: (?<=\1)([a-z])
Я знаю, что его можно использовать в Lookahead: ([a-z])(?=\1)
Я тестирую свои шаблоны регулярных выражений с помощью онлайн-инструмента, и он постоянно выдает мне ошибки всякий раз, когда я использую выражение '\ n' в Lookbehind.
Это заставляет меня думать, что либо требуется специальный синтаксис, либо это просто невозможно.
Если действительно невозможно использовать выражение '\ n' в Lookbehind, есть ли альтернативы, которые будут работать так же хорошо?
Редактировать: Моя цель - иметь возможность динамически проверить наличие символа перед текущим персонажем.
Мой конкретный вариант использования заключается в том, что я ищу все символы, которым не предшествует ни один и тот же символ, за которым они стоят.
Например, с учетом этих строк:
// Should match 'b', because it is neither followed nor preceded by a 'b'.
// Should match 'd' for the same reason
aabccd
// Should match 'y'
xxyzz
// Should match 'l' and 'o'
lmmmnnopppp
Я подумал, что лучший способ сделать это - сопоставить все символы, используя ([a-z])
, но выбрать только те, которым не предшествовал один и тот же символ, используя (?<!\1)
, и за которыми не следовал один и тот же символ, используя: (?!\1)
.
Полный шаблон будет выглядеть примерно так: /(?<!\1)([a-z])(?!\1)/g
Однако, если выражения 'nth capturing group' не могут быть использованы в утверждениях Lookebehind, и нет эквивалентной замены, тогда мне придется искать другую стратегию.