无法重用JavaScript正则表达式中的捕获组模式

时间:2018-12-12 10:10:26

标签: javascript regex validation dry capturing-group

我的问题有点类似于this question。但是,由于以下原因,我的问题有所不同:

  • 不是以特定的方式问这个问题。
  • 它不包含任何JavaScript风格的正则表达式模式,只是验证两个嵌套级别的模式除外。
  • 它仅包含一些算法,由于我正在尝试学习正则表达式,因此我不需要这些算法。

我正在尝试通过将表达式验证为“ 平衡括号”来学习正则表达式。

  

平衡括号是一个表达式,其中每个(都用一个对应的)

关闭

例如,以下表达式有效:

(1+2)*(2+5)
(1+2(3+4)-6)/(2+4)
((()))

但是(3+4()无效。
为简单起见,假定括号内的术语为数字和运算符。


我正在使用JavaScript正则表达式。因此,我尝试了以下正则表达式。但是,它doesn't worked out

^(\((?:[^()]|\1*)\)[^()]*)+$

但是,当我尝试下面的PCRE正则表达式时,它是worked out nicely

^(\((?:[^()]|(?1))*\)[^()]*)+$

两个正则表达式之间唯一的语法差异是第一个捕获组的重复使用方式:JS中的\1和PCRE中的(?1)。我知道\1不是subroutine的一种,所以JavaScript中是否存在任何替代品,除了再次重复整个模式之外?

我知道在variables构造函数中使用RegExp的方法。但是,我的正则表达式是嵌套,因此已被排除。

1 个答案:

答案 0 :(得分:0)

不可能使用普通的JS正则表达式来匹配深度未知的递归结构。

有些非正则表达式实现可让您在JS中进行匹配。

这是Regular expression to match balanced parentheses的重复问题。