Javascript 在数组中拆分并保留子字符串

Javascript 在数组中拆分并保留子字符串,javascript,arrays,split,Javascript,Arrays,Split,是否有一种方法可以拆分某个字符,然后将该字符保留在数组中 例如,“hello???world”在?上拆分会得到[“hello”、“??”、“world”] 这与JavaScript拆分方法不同,后者给出[“hello”,“world”](不在子字符串中保留???) 这是我到目前为止在一些测试用例中得到的结果,但我不确定使用什么来保留子字符串 var splitter = (str) => { return str.split('???'); } // Tests console.lo

是否有一种方法可以拆分某个字符,然后将该字符保留在数组中

例如,
“hello???world”
上拆分会得到
[“hello”、“??”、“world”]

这与JavaScript拆分方法不同,后者给出
[“hello”,“world”]
(不在子字符串中保留???)

这是我到目前为止在一些测试用例中得到的结果,但我不确定使用什么来保留子字符串

var splitter = (str) => {
  return str.split('???');
}

// Tests
console.log(splitter("this is some text ???") === ["this is some text ", "???"])
console.log(splitter("this is ??? text???") === ["this is ", "???", " text", "???"])
console.log(splitter("this is some text") === ["this is some text"])
console.log(splitter("(???)") === ["(", "???", ")"])
console.log(splitter("   ") === ["   "])
console.log(splitter(" ??? ") === [" ", "???", " "])
console.log(splitter("??????") === ["???", "???"])
console.log(splitter("?????????") === ["???", "???", "???"])
console.log(splitter("(??????") === ["(", "???", "???"])

由于
split
接受正则表达式,并且匹配中捕获的组将包含在输出中,因此您可以对捕获的
\?\?\?
组进行
split
。(因为
是正则表达式中的一个特殊字符,要指示文本
,必须首先通过
\
对其进行转义)

然后,要筛选出空匹配项,请对结果使用
.filter(布尔)

var splitter = (str) => (
    str.split(/(\?\?\?)/)
      .filter(Boolean)
);
还要注意的是,由于数组是对象,新创建的数组将永远不会被另一个数组
===
,例如
==['任何其他']
将始终是
false
-要比较值,请首先通过
stringify
join
对数组进行字符串化

var拆分器=(str)=>{
返回JSON.stringify(
str.split(/(\?\?)/)
.filter(布尔值)
);
}
//测验
console.log(拆分器(“这是一些文本?”)==JSON.stringify([“这是一些文本”,“??”]))
console.log(拆分器(“这是文本?”)==JSON.stringify([“这是”、“?”、“文本”、“?”]))
log(拆分器(“这是一些文本”)==JSON.stringify([“这是一些文本”]))
console.log(splitter(“(?)”)==JSON.stringify([“(”,“?”,”)))
console.log(拆分器(“”===JSON.stringify([“”]))
log(拆分器(“???”)==JSON.stringify([“”,“???”,”“]))
console.log(拆分器(“???”)==JSON.stringify([“???”,“???”]))
console.log(splitter(“???????”)==JSON.stringify([“?”、“?”、“?”))

console.log(splitter(“(???”)==JSON.stringify([“(”,“???”,“???”))
因为
split
接受正则表达式,并且匹配中捕获的组将包含在输出中,所以您可以对捕获的
\?\?\?
组进行
拆分。(因为
是正则表达式中的一个特殊字符,要指示文本
,必须首先通过
\
对其进行转义)

然后,要筛选出空匹配项,请对结果使用
.filter(布尔)

var splitter = (str) => (
    str.split(/(\?\?\?)/)
      .filter(Boolean)
);
还要注意的是,由于数组是对象,新创建的数组将永远不会被另一个数组
===
,例如
==['任何其他']
将始终是
false
-要比较值,请首先通过
stringify
join
对数组进行字符串化

var拆分器=(str)=>{
返回JSON.stringify(
str.split(/(\?\?)/)
.filter(布尔值)
);
}
//测验
console.log(拆分器(“这是一些文本?”)==JSON.stringify([“这是一些文本”,“??”]))
console.log(拆分器(“这是文本?”)==JSON.stringify([“这是”、“?”、“文本”、“?”]))
log(拆分器(“这是一些文本”)==JSON.stringify([“这是一些文本”]))
console.log(splitter(“(?)”)==JSON.stringify([“(”,“?”,”)))
console.log(拆分器(“”===JSON.stringify([“”]))
log(拆分器(“???”)==JSON.stringify([“”,“???”,”“]))
console.log(拆分器(“???”)==JSON.stringify([“???”,“???”]))
console.log(splitter(“???????”)==JSON.stringify([“?”、“?”、“?”))

console.log(splitter(“(?”)==JSON.stringify([“(”,“?”,“?”))
修复了最后一行的第三个。谢谢!修复了最后一行的第三个。谢谢!