JavaScript中如何按指定条件拆分字符串,忽略括号内的&&分隔符
忽略括号内符号的&&拆分实现方案
核心逻辑
通过括号层数计数法全程维护嵌套层数状态:
- 遇到
(时括号层数+1,遇到)时括号层数-1 - 只有括号层数为0时,代表当前处于所有括号外部,此时遇到的
&&才作为拆分分隔符 - 括号层数>0时,所有
&&都直接保留到当前片段,不触发拆分逻辑
代码实现
function splitAndIgnoreBracketInner(str) { const result = []; let currentFragment = ''; let bracketLevel = 0; for (let i = 0; i < str.length; i++) { // 识别到括号外的&&时触发拆分 if (str[i] === '&' && str[i + 1] === '&' && bracketLevel === 0) { // 若需要保留分隔符前后原始空格,删除trimEnd()调用即可 result.push(currentFragment.trimEnd()); currentFragment = ''; i++; // 跳过第二个&符号,避免重复遍历 continue; } // 更新括号嵌套层数计数 if (str[i] === '(') bracketLevel++; if (str[i] === ')') bracketLevel--; currentFragment += str[i]; } // 追加最后一段未结束的内容 if (currentFragment) { result.push(currentFragment.trimEnd()); } return result; } // 测试调用 const str = "countryid == 45 && (payerid==82||payerid==84||payerid==79) && (fobid!=1&&fobid!=2)"; const breakCond = splitAndIgnoreBracketInner(str); console.log(breakCond);
输出结果
[ "countryid == 45", "(payerid==82||payerid==84||payerid==79)", "(fobid!=1&&fobid!=2)" ]
该方案同时支持多层括号嵌套场景,即使出现a&&(b&&(c&&d))&&e这类复杂表达式也可正常拆分。
内容的提问来源于stack exchange,提问作者Poojan Pandya
相关产品推荐
相关产品推荐

