梗概

  • 通过括号匹配算法获取字符串中指定括号层级的索引范围
  • 分割的时候,判断当前分割符是否在指定括号层级内

JavaScript实现

interface bracket {
    left: string,
    right: string
}
export class Split {
    /**@param brackets 元素为一对括号,用对象表示,left属性和right属性分别用来存放左右括号 */
    static splitWithBracket(str: string, split: RegExp, startL = 0, endL = startL, brackets: bracket[] = undefined) {
        if (!brackets) {
            brackets = [
                { left: '(', right: ')' },
                { left: '[', right: ']' },
                { left: '{', right: '}' },
                { left: '(', right: ')' }
            ]
        }
        let bracketRange = this.getBracketRange(str, brackets)
        return this.selectiveSplit(str, split, match => {
            return this.isInBracket(match.index as number, bracketRange, startL, endL)
        })
    }
}

1. 依赖