JS拆分字符串并返回每个拆分的索引

Nik*_*Dim 5 javascript regex split

我想在某个正则表达式上拆分文本,并在原始字符串中获得拆分开始位置的索引。举个简单的例子:

"bla blabla haha".splitOnRegexWithIndex(whitespaceRegex)
Run Code Online (Sandbox Code Playgroud)

需要的输出是

[["bla", 0], ["blabla", 4], ["haha", 11]]
Run Code Online (Sandbox Code Playgroud)

此处的正则表达式可以是任何内容,而不仅仅是空格,因此分隔符不是固定大小。

拆分是在正则表达式上完成的。我不想在起始字符串中使用indexOffind "blabla",因为那将是 O(n 2 ) 复杂性,这在我的场景中是不可接受的。

mel*_*ene 3

这是基于以下可能的实现.exec

function split_with_offset(str, re) {
    if (!re.global) {
        throw "no no no no :(";
    }
    let results = [];
    let m, p;
    while (p = re.lastIndex, m = re.exec(str)) {
        results.push([str.substring(p, m.index), p]);
    }
    results.push([str.substring(p), p]);
    return results;
}

console.log(split_with_offset("bla blabla haha", /\s+/g));
console.log(split_with_offset("   ", /\s+/g));
console.log(split_with_offset("", /\s+/g));
Run Code Online (Sandbox Code Playgroud)

警告:正则表达式必须设置g标志。