我想在 URL 查询中使用正则表达式捕获每个 name=value
对。
假设我有这样的查询:
?lm=1403085628
?lm=1403085628&other=343323
?lm=1403085628&other=&second=34342
?lm=1403085628&=343243&second=34342
?lm=1403085628&other=343323&some=efsfs
?
?lm=1403085628&other=343323&&&wrong
如果我尝试this : ^\?(?:([a-zA-Z0-9-_]+\=[a-zA-Z0-9-_]+)&?)*
这仅捕获最后一次出现的情况,例如,some=efsfs
捕获第三次出现的情况。
但我想要的是一个像这样的键值对数组:
[
'lm=1403085628',
'other=',
'second=34342'
]
如何捕获捕获组的所有出现?
PS:我想这肯定有人问过,但我找不到任何问题,但也许是因为我不知道措辞。
最佳答案
怎么样
var regex = /(?:[?&](.*?)=([^?&]+))/g
regex.exec(inputQuery);
这将以这种方式返回值:
["?lm=1403085628", "lm", "1403085628"]
索引 0 是匹配项,索引 1 是名称,索引 2 是值。如果您在循环中执行此操作,则可以立即捕获名称和值
var result;
var values = [];
do {
values.push(result);
} while(result = regex.exec(queryInput))
或者(没有正则表达式,更有效),您可以使用:
'?lm=1403085628&other=&second=34342'.slice(1).split('&')
// Results in : ["lm=1403085628", "other=", "second=34342"]
编辑:JsFiddle 演示切片/分割方法
console.log('?lm=1403085628'.slice(1).split('&'));
console.log('?lm=1403085628&other=343323'.slice(1).split('&'));
console.log('?lm=1403085628&other=&second=34342'.slice(1).split('&'));
console.log('?lm=1403085628&=343243&second=34342'.slice(1).split('&'));
console.log('?lm=1403085628&other=343323&some=efsfs'.slice(1).split('&'));
console.log('?'.slice(1).split('&'));
console.log('?lm=1403085628&other=343323&&&wrong'.slice(1).split('&'));
关于javascript - 如何多次捕获同一个捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42249423/