Разбить строку по нескольким разделителям и оставить некоторые разделители, отбрасывая другие - PullRequest
2 голосов
/ 04 марта 2020

Я хотел бы разделить пробелом строку " " при его удалении, а также разделить запятой "," при сохранении.

var str = "This is a word, and another."
var regexKeepCommaDelimeter = new RegExp(/(,)/,'g')
var regexKeepCommaRemoveSpace = new RegExp(/(????)/,'g')
var splitArray = str.split(regexKeepCommaRemoveSpace)
var desiredArray = ['This', 'is', 'a', 'word', ',', 'and', 'another.' ]
var testPassed = splitArray.every((x,i)=> x == desiredArray[i])
console.log('Arrays match:', testPassed)

Ответы [ 2 ]

3 голосов
/ 04 марта 2020

Одним из довольно простых подходов было бы добавить пробелы вокруг любых ,, у которых их нет, а затем просто разделить их на пробелы:

var splitArray = str.replace(/ ?, ?/g, " , ").split(" ");

Live Пример:

var str = "This is a word, and another."
var splitArray = str.replace(/ ?, ?/g, " , ").split(" ");
console.log(splitArray);
var desiredArray = ['This', 'is', 'a', 'word', ',', 'and', 'another.' ];
console.log(splitArray.every((e, i) => e === desiredArray[i]));
.as-console-wrapper {
    max-height: 100% !important;
}
1 голос
/ 04 марта 2020

Соответствует пробелу, соответствует и захватывает запятую при разбиении с помощью str.split(/\s+|(,)/).filter(Boolean).

. Или вы можете сопоставить любое количество символов, кроме пробелов и запятых, или просто запятая с str.match(/[^\s,]+|,/g).

var str = "This is a word, and another.";
console.log(
  str.split(/\s+|(,)/).filter(Boolean)
);
// => ["This", "is", "a", "word", ",", "and", "another."]

console.log(
  str.match(/[^\s,]+|,/g)
);
// => ["This", "is", "a", "word", ",", "and", "another."]

Часть .filter(Boolean) удалит пустые элементы из результирующего массива, которые появляются из-за возможных последовательных совпадений или совпадений в начале строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...