与任何带n次括号的字符串匹配的正则表达式



例如,它应该匹配(aaa)((aaa))(((aaa))),但不匹配((aaa)(aaa))
这可能吗?

附言:如果重要的话,我需要这个JavaScript正则表达式。

如果您愿意做的不仅仅是regex(我的意思是做一点点),您可以使用此函数。

check_parens('(((aaa)))');
check_parens('((aaa)))');
check_parens('aaa');

function check_parens(hay) {
    var re = /((+)(?:[^)]+)()+)/g;
    var matches = re.exec(hay);
    if (matches === null || matches[1].length !== matches[2].length)
        alert("Too bad...");
    else 
        alert("We're good!");
}

演示

您所描述的语言是上下文无关的,不是正则语言,因此不存在这样的正则表达式。对于这种语言,我们可以很容易地证明L={a^n * b^n}的同态,而L是一种众所周知的不规则语言。

使用一些正则表达式展开可能是可行的,但在标准正则表达式中则不然,标准正则表达式最初代表正则语言。

最新更新