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

时间:2012-01-13 16:25:23

标签: regex

例如,它应与(aaa)((aaa))(((aaa)))匹配,但不能与((aaa)(aaa))匹配。
它甚至可能吗?

P.S。如果重要,我需要这个JavaScript的正则表达式。

2 个答案:

答案 0 :(得分:1)

您所描述的语言是context free而不是regular language,因此没有这样的正则表达式。可以轻松地为此语言显示homomorphismL={a^n * b^n}L是众所周知的不规则语言。

有可能使用一些正则表达式扩展,但不能用于标准正则表达式,它最初用于常规语言。

答案 1 :(得分:1)

如果你愿意做多于正则表达式(我的意思是一点点),你可以使用这个功能。

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!");
}

demo