Мой вопрос чем-то похож на этот вопрос .Однако мой вопрос отличается от следующего:
- Вопрос был не задан с определенным вкусом.
- Он не содержит ни одного изШаблон регулярных выражений в разновидности JavaScript, за исключением того, что только проверяет два уровня вложенности.
- Он содержит только некоторые алгоритмы , которые мне не нужны, потому что япытаюсь выучить Regex.
Я пытаюсь выучить 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
конструктор.Но мое регулярное выражение вложено , и поэтому одно исключено.