Javascript正则表达式排除在括号内

时间:2015-09-15 14:25:18

标签: javascript regex negative-lookbehind

我正在尝试在字符+ *()上拆分表达式字符串,但是如果它们不在括号内,我只需要拆分它。我正在努力为这项任务创建正确的正则表达式。

示例:

.N.TESTARRAY[INT1+2] + ONLINE * STACKOVERFLOW

我希望这能产生一个数组,如:

[ ".N.TESTARRAY[INT1+2]" , "ONLINE" , "STACKOVERFLOW" ]

目前我的正则表达式拆分了字符+ *()[]

split(/(\+|\*|\[|\]|\(|\))/g)

因为我也在方括号上分开,然后循环遍历数组并合并括号内的任何内容。我认为这很笨拙,并希望将它全部转移到正则表达式中。

function mergeInnerBrackets(tokens) {
        var merged = [];
        var depth = 0;

        for(var i = 0; i < tokens.length; i++) {
            if(tokens[i] == "[") {
                depth++;
                merged[merged.length-1] += "[";
            } else if(tokens[i] == "]") {
                depth--;
                merged[merged.length-1] += "]";
            } else if(depth > 0) {
                merged[merged.length-1] += tokens[i];
            } else {
                merged.push(tokens[i]);
            }
        }

        return merged;
}

我正在使用JavaScript并且需要能够支持回IE8。我还读到了一些关于能够用负面看后台做到这一点的事情,但我看到JavaScript不支持这一点。

1 个答案:

答案 0 :(得分:3)

字符串也可以像.N.TEST[INT1+2] + ON[INT1] * ON[INT2]吗?我宁愿使用regex like this

\s*[+*)(](?![^[]*])\s*

如果字符串可以包含多对[ ... ]

var str = '.N.TEST[INT1+2] + ON[INT1] * ON[INT2]';
console.log(str.split(/\s*[+*)(](?![^[]*])\s*/));

JSFiddle demo