Невозможно повторно использовать шаблон группы захвата внутри регулярного выражения JavaScript
Мой вопрос чем-то похож на этот вопрос. Тем не менее, мой вопрос отличается из-за следующего:
- Вопрос не был задан в конкретном аромате.
- Он не содержит паттерна регулярных выражений во вкусе JavaScript, кроме одного, который проверяет только два уровня вложенности.
- Он содержит только некоторые алгоритмы, которые мне не нужны, потому что я пытаюсь изучить Regex.
Я пытаюсь выучить регулярные выражения, проверяя выражение как "сбалансированные скобки".
Сбалансированная скобка - это выражение, в котором каждый
(
закрывается с соответствующим)
Например, следующие выражения действительны:
(1+2)*(2+5)
(1+2(3+4)-6)/(2+4)
((()))
Но, (3+4()
является недействительным.
Для простоты предположим, что члены в скобках - это цифры и операторы.
Я использую регулярное выражение JavaScript. Итак, я попробовал следующее регулярное выражение. Однако это не сработало.
^(\((?:[^()]|\1*)\)[^()]*)+$
Но когда я попробовал ниже PCRE
регулярное выражение, это сработало хорошо.
^(\((?:[^()]|(?1))*\)[^()]*)+$
Единственная синтаксическая разница в обоих регулярных выражениях заключалась в том, как первая группа захвата использовалась повторно: \1
в JS и (?1)
в PCRE. я знаю это \1
не своего рода subroutine
Итак, есть ли альтернативы в JavaScript, кроме повторения всего шаблона снова?
Я знаю способ использования variables
внутри RegExp
конструктор. Но, мое регулярное выражение вложено и поэтому исключено.
0 ответов
Невозможно использовать простое регулярное выражение JS для сопоставления рекурсивных структур неизвестной глубины.
Существуют реализации без регулярных выражений, которые позволяют сопоставлять их в JS.
Это повторяющийся вопрос регулярного выражения для соответствия сбалансированным круглым скобкам.