Разделение строки JavaScript несколькими разделителями с сохранением разделителей

#javascript #regex #split

#javascript #регулярное выражение #разделение

Вопрос:

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

"id:123 name:test pumpe desc:pumpe p123".split(/(?=(id:))|(?=(name:))|(?=(desc:))/gi)

Результат, который я получаю:

["id:123 ", undefined, "name:", undefined, "name:test pumpe ", undefined, undefined, "desc:", "desc:pumpe p123"]

Результат, который я хочу:

["id:123", "name:test pumpe", "desc:pumpe p123"]

Я попытался немного поработать с регулярным выражением, но не смог получить желаемый результат.

Комментарии:

1. .split(/s (?=(?:id|name|desc):)/i) ?

Ответ №1:

Разделителями, которые вы на самом деле хотите разделить, являются пробелы, в частности, пробелы, за которыми следует name: , id: или desc: .

Следуя этой логике, это регулярное выражение может быть построено:

 / (?=name:|id:|desc)/i
 

(Обратите внимание на начальный пробел)

Попробуйте это здесь: https://regex101.com/r/0RxEU9/1

 console.log("id:123 name:test pumpe desc:pumpe p123".split(/ (?=name:|id:|desc)/i)) 

Комментарии:

1. При использовании в .split g модификатор не требуется, split() разбивается на все вхождения в строке.

Ответ №2:

Вы можете искать пробел, а затем не пробел и двоеточие.

 console.log("id:123 name:test pumpe desc:pumpe p123".split(/s(?=S ?:)/)); 

Ответ №3:

Если имена ключей неизвестны, вы можете выполнить split в каждом s , за которым следует w :

(Демонстрация регулярных выражений)

 const splits = "id:123 name:test pumpe desc:pumpe p123".split(/s (?=w :)/)
console.log(splits) 

Ответ №4:

Вы ищете все, что следует шаблону [name:]|[desc:]|[id:] , поэтому упростите свое регулярное выражение:

 console.log("id:123 name:test pumpe desc:pumpe p123".split(/ (?=name:|id:|desc:)/i));