JavaScript String разделяется с несколькими разделителями, сохраняя разделители - PullRequest
1 голос
/ 17 апреля 2019

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

"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"]

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

Ответы [ 4 ]

2 голосов
/ 17 апреля 2019

Разделителями, которые вы на самом деле хотите разделить, являются пробелы, в частности пробелы, за которыми следуют 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 голос
/ 17 апреля 2019

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

( Regex demo )

const splits = "id:123 name:test pumpe desc:pumpe p123".split(/\s+(?=\w+:)/)
console.log(splits)
1 голос
/ 17 апреля 2019

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

console.log("id:123 name:test pumpe desc:pumpe p123".split(/\s(?=\S+?:)/));
0 голосов
/ 17 апреля 2019

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

console.log("id:123 name:test pumpe desc:pumpe p123".split(/ (?=name:|id:|desc:)/i));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...