Разбить и сохранить подстроку в массиве - PullRequest
0 голосов
/ 01 января 2019

Есть ли способ разделить определенный символ, а затем сохранить этот символ в массиве.

Например, "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("(??????") === ["(", "???", "???"])

1 Ответ

0 голосов
/ 01 января 2019

Поскольку 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(["(", "???", "???"]))
...