用最顶层的括号分割字符串

2024-01-01

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

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


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

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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用最顶层的括号分割字符串 的相关文章