为什么这个正则表达式拆分第二个双引号而不拆分第一个双引号



我有这个正则表达式:

let regex = /(?=.|["])/;
test = ""test.test""
test.split(regex)

输出:

[""test", ".test", """]

而我想要

[""", "test", ".test", """]

我不明白为什么它拆分第二个双引号而不是第一个双引号

附言:必须保持像那样的".test"(而不是"."test"(

这不是纯正则表达式解决方案,但您可以将此正则表达式与捕获组一起使用,并过滤空结果:

const str = '"test.test"';
var arr = str.split(/(")|(?=.)/).filter(Boolean)
console.log(arr)


方法问题:

您的正则表达式使用了一个前瞻性断言,该断言可以缩短为:

(?=[."])

这意味着匹配下一个位置有一个点或"的零宽度匹配。

由于您的输入在开始时有",因此它匹配位置0,然后是点之前的位置,最后是最后一个闭合"之前的位置(总共3个匹配(。

最新更新