我的问题有点类似于this question。但是,由于以下原因,我的问题有所不同:
我正在尝试通过将表达式验证为“ 平衡括号”来学习正则表达式。
平衡括号是一个表达式,其中每个
关闭(
都用一个对应的)
例如,以下表达式有效:
(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
的方法。但是,我的正则表达式是嵌套,因此已被排除。
答案 0 :(得分:0)
不可能使用普通的JS正则表达式来匹配深度未知的递归结构。
有些非正则表达式实现可让您在JS中进行匹配。