#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));