Извлечение ключа: пары значений, связанные с регулярным выражением из строки в Javascript - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующая строка

server:all, nit:4545, search:dql has map

с регулярным выражением /(\w+):((?:"[^"]*"|[^:,])*)/g Я получаю

["server:all", "nit:4545", "search:dql has map"] //Array

Но я хочу получить

{server:"all","nit":"4545","search":"dql has map"}

ИЛИ

[{server:"all"},{"nit":"4545"},{"search":"dql has map"}]

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Вы можете использовать простое регулярное выражение для key:value и использовать вид, используя exec:

var str = 'server:all, nit:4545, search:dql has map';
var re = /([\w-]+):([^,]+)/g;

var m;
var map = {};

while ((m = re.exec(str)) != null) {
  map[m[1]] = m[2];
}

console.log(map);
0 голосов
/ 12 декабря 2018

Для данных вашего примера вы также можете сначала разделить на запятую, а затем разделить на двоеточие:

let str = "server:all, nit:4545, search:dql has map";
let result = {};
str.split(',').forEach(function(elm) {
  [k, v] = elm.trim().split(':');
  result[k] = v;
});

console.log(result);
0 голосов
/ 11 декабря 2018

Вы можете использовать String#replace, чтобы зациклить совпадения и записи и назначить их пустому объекту.

const string = 'server:all, nit:4545, search:dql has map';
const regex = /(\w+):((?:"[^"]*"|[^:,])*)/g;
const map = {};

string.replace(regex, (m, c1, c2) => {
  map[c1] = c2;
});

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