Невозможно повторно использовать шаблон группы захвата внутри регулярного выражения 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.

Это повторяющийся вопрос регулярного выражения для соответствия сбалансированным круглым скобкам.

Другие вопросы по тегам