给定这样的字符串:
"fieldNameA[fieldValueA] fieldNameB[fieldValueB] fieldNameC[fieldValueC]"
我正在寻找一个(或两个(正则表达式,它将允许我构造一组键值对,例如
fieldNameA : "fieldValueA"
fieldNameB : "fieldValueB"
fieldNameC : "fieldValueC"
- 值将始终位于方括号中。
- 方括号将始终在字段名称前面
- 字段名称的长度可能有所不同
我尝试了类似的东西:
const reg = new RegExp("fieldNameA|fieldNameB|fieldNameC[(.*?)]", "gi");
const matches = reg.exec(query);
但这行不通。我只得到一个带有一个值的数组:"fieldNameA">
您可以使用以下解决方案:
var query = "fieldNameA[fieldValueA] fieldNameB[fieldValueB] fieldNameC[fieldValueC]";
var matches = {}, m;
var reg = /(w+)[(.*?)]/gi;
while(m=reg.exec(query)) {
matches[m[1]] = m[2];
}
console.log(matches);
您需要使用正则表达式文本,否则"["
将变成"["
并且不再匹配文本[
。
此外,要匹配所有匹配项,您需要在循环中运行RegExp#exec
。
图案详情:
(w+)
- 组 1:一个或多个单词字符(如果要匹配不能以数字开头的标识符,请替换为[_a-zA-Z]w*
([
- 字面[
(.*?)
- 第 2 组:除换行符字符以外的任何 0+ 字符(如果需要匹配除]
以外的任何字符,请使用[^]]*
(]
- 字面]
字符。