首页 > 正则表达式括号嵌套匹配

正则表达式括号嵌套匹配

比如说这一个式子(1 + 2)(1 + (1 + 2)),我想拿到里面的"1 + 2" 和 "1 + (1 + 2)",怎么做?
当左边括号里和右边括号里的括号数量无限多(都是成对的括号),我也要取到左边括号和右边括号里的字符串。


// 这个正则假设字符串最外层包含&只包含左右两对括号
// 除此之外没有其他内容(两对括号里面可以有任意内容,包括括号)
var reg = /^\(([^()]*(\(.*\))*[^()]*)*\)\(([^()]*(\(.*\))*[^()]*)*\)$/;

// test1
var s = '(1 + 2)(1 + (1 + 2))';
var match = s.match(reg);
console.log(match[1]); // 1 + 2
console.log(match[3]); // 1 + (1 + 2)
// test2
s = '(1 + 2)((1 + 2)(3 + 4))';
match = s.match(reg);
console.log(match[1]); // 1 + 2
console.log(match[3]); // (1 + 2)(3 + 4)

var str = '(1+2)(1+(1+2))',
    i = -1,
    len = str.length,
    stack = 0,
    start = 0,
    result = [];

while (++i < len) {
    var c = str.charAt(i);

    if (c === '(') {
        if (stack === 0) {
            start = i;
        }

        stack++;
    } else if (c === ')') {
        stack--;

        if (stack === 0) {
            result.push(str.substring(start, i + 1));
        }
    }
}

console.log(result);
【热门文章】
【热门文章】