例如,它应该匹配(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
是一种众所周知的不规则语言。
使用一些正则表达式展开可能是可行的,但在标准正则表达式中则不然,标准正则表达式最初代表正则语言。