Цель состоит в том, чтобы проанализировать строку в словаре массива в javascript.
Например, это может быть строка, которая должна быть проанализирована
"К = 23: 3/24: 32b = 43: 532: 45/3: 3253"
Я бы хотел, чтобы эта строка превращалась в такой словарь (Key-Value)
k - 23: 3/24: 32
b - 43: 532: 45/3: 3253
Моя первоначальная идея заключалась в том, чтобы искать [aZ]\*. * И разбивать его на совпадения с помощью regex.
Тем не менее, я не думаю, что это сработает, так как это также приведет к б, который не то, что я хочу. Кроме того, я не смог заставить это работать (я новичок в регулярном выражении).
Значения равны будут всегда только между ключом и переменной (никогда в значении). Ключ также будет единственным символом, а не словом.
var test = "k=23:3/24:32b=43:532:45/3:3253";
var r = /(.*)([a-Z])(//*)(*.)/
Выше была идея об этом, но я не могу заставить работать.
Возможно, используйте /.=[^=]+(?!=)/g
для сопоставления пары значений ключа, не зная, какие символы возможны для ключа и значения:
.=
Соответствует ключу (одиночный символ) прямо перед знаком равенства;[^=]+(?!=)
соответствует всем символам non =
после символа до следующего знака равенства (ограничение жадного соответствия с отрицательным просмотром вперед) или конец строки;
var test = "k=23:3/24:32b=43:532:45/3:3253";
var result = {}
test.match(/.=[^=]+(?!=)/g).forEach(
m => {
var [k, v] = m.split('=')
result[k] = v
}
)
console.log(result)
*
качестве разделителя для пар ключ-значение? Если это так, попробуйте /.\*[^*]+(?!\*)/g
, обратите внимание, что вам нужно экранировать *
поскольку это квантификатор в регулярном выражении.
Поскольку идентификатор - это только один символ, а =
- это где идентификатор заканчивается и начинается значение, тогда просто используйте это выражение с помощью регулярного выражения:
var r = /.=.+?(?=(.=)|$)/g;
Что значит:
. : a character
= : followed by =
.+? : followed by a bunch of characters (the ? means non-greedy mode: match as few as possible so that it won't consume from other variables)
(?=(.=)|$) : positive look-ahead, means that the above should be followed either by another .= (a character that is followed by =) or the end of the string
Затем вы можете reduce
совпадения, чтобы получить желаемый объект, split
каждое соответствие, чтобы получить пары ключ-значение:
var obj = test.match(r).reduce(function(obj, match) {
var keyValue = match.split("=");
obj[keyValue[0]] = keyValue[1];
return obj;
}, {});
Пример:
var test = "k=23:3/24:32b=43:532:45/3:3253";
var r = /.=.+?(?=(.=)|$)/g;
var obj = test.match(r).reduce(function(obj, match) {
var keyValue = match.split("=");
obj[keyValue[0]] = keyValue[1];
return obj;
}, {});
console.log(obj);
(digits):(digits)/(digits):(digits)
- так ли это?