Поскольку split
принимает регулярное выражение, и захваченные группы внутри совпадения будут включены в вывод, вы можете просто split
для захваченной группы \?\?\?
.(Поскольку ?
является специальным символом в регулярном выражении, для обозначения литерала ?
вы должны сначала экранировать его с помощью \
.)
Затем, чтобы отфильтровать пустые совпадения, используйте .filter(Boolean)
по результату:
var splitter = (str) => (
str.split(/(\?\?\?)/)
.filter(Boolean)
);
Также обратите внимание, что поскольку массивы являются объектами, вновь созданный массив никогда не будет ===
другим, например, <anything> === ['anything else']
будет всегда быть false
- чтобы сравнить значения, сначала зафиксируйте массивы с помощью stringify
или join
.
var splitter = (str) => {
return JSON.stringify(
str.split(/(\?\?\?)/)
.filter(Boolean)
);
}
// Tests
console.log(splitter("this is some text ???") === JSON.stringify(["this is some text ", "???"]))
console.log(splitter("this is ??? text???") === JSON.stringify(["this is ", "???", " text", "???"]))
console.log(splitter("this is some text") === JSON.stringify(["this is some text"]))
console.log(splitter("(???)") === JSON.stringify(["(", "???", ")"]))
console.log(splitter(" ") === JSON.stringify([" "]))
console.log(splitter(" ??? ") === JSON.stringify([" ", "???", " "]))
console.log(splitter("??????") === JSON.stringify(["???", "???"]))
console.log(splitter("?????????") === JSON.stringify(["???", "???", "???"]))
console.log(splitter("(??????") === JSON.stringify(["(", "???", "???"]))