正则表达式括号嵌套匹配

JasonKidd
  • 3.3k

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

回复
阅读 19.6k
2 个回答
代码宇宙
  • 15.6k
✓ 已被采纳
// 这个正则假设字符串最外层包含&只包含左右两对括号
// 除此之外没有其他内容(两对括号里面可以有任意内容,包括括号)
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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏