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([“(”,“?”,“?”))
修复了最后一行的第三个。谢谢!修复了最后一行的第三个。谢谢!