按最上层括号

时间:2017-04-09 19:15:32

标签: javascript regex

我有一个如下字符串:'(1) (2 (3))'
我想正则表达它以获得以下数组:['1', '2 (3)']
另一个例子:'(asd (dfg))(asd (bdfg asdf))(asd)' - > ['asd (dfg)', 'asd (bdfg asdf)', ('asd')]

我试图搜索如何执行这样的正则表达式,但我只找到了被所有()分割的,找不到任何东西只能过滤它们的最高级别。

1 个答案:

答案 0 :(得分:1)

我没有看到用正则表达式解决它的方法,这是一种程序化的方法(尽管可能有更多优雅的方法来处理这个问题...特别是因为它非常脆弱,它依赖于括号来总是以正确的顺序应用)。

var string = "(asd (dfg))(asd (bdfg asdf))(asd)".split(''),
    result = [],
    fragment = '',
    countOpen = 0,
    countClosed = 0;
    
    
string.forEach(function (character) {
    fragment += character;
    
    if (character === '(') {
        countOpen += 1;
    }
    
    if (character === ')') {
        countClosed += 1;
    
        if (countOpen === countClosed) {
            result.push(fragment.slice(1, -1));
            fragment = '';
        }
    }
});

console.log(result);