我做了很多研究,但显然我的正则表达式技能还不足以解决这个问题,所以我谦卑地寻求建议。
我有一个JS var,它可以获得与此类似的字符串:
"value=8kadctgwqqe0&value=8kaczvfgoyrs&value=8kwkgz2ysm1i"
它没有固定的长度。它可能会返回1或20个值,但无法知道。
正如您所看到的,它会返回一大串值,这些值始终位于" value ="除了最后一个,没有"&"到底。 我需要解析它,并最终得到它:
8kadctgwqqe0
8kaczvfgoyrs
8kwkgz2ysm1i
我甚至不知道从哪里开始...... 非常感谢!
答案 0 :(得分:3)
如果你的字符串总是在值= SOMETHING& value = SOMETHINGELSE格式,请使用此
string.split("value=").join("").split("&")
根据How to replace all occurrences of a string in JavaScript?它实际上更快地使用它而不是正则表达式
var string = "value=8kadctgwqqe0&value=8kaczvfgoyrs&value=8kwkgz2ysm1i"
var yourArray = string.split("value=").join("").split("&")
["8kadctgwqqe0", "8kaczvfgoyrs", "8kwkgz2ysm1i"]
如果您不确定,可能需要添加一些测试以确保字符串格式正确。
答案 1 :(得分:2)
以下RegExp / .filter()应该这样做:
'value=8kadctgwqqe0&value=8kaczvfgoyrs&value=8kwkgz2ysm1i'.match(/([^=&]+)/g).filter(function(a){return a!='value'});
.match()
将获取单独的查询值(以及键名称)。为了解决这个问题,我们使用.filter()
删除了value
个结果。这将使其得到正确的结果。
.filter()
太棒了,more info on it here
答案 2 :(得分:1)
您可以使用以下正则表达式:
/(?:^|&)value=([^&]*)/g
然后将匹配存储在第一个捕获组中。
您现在可以访问捕获组using this method:
var myRegexp = /(?:^|&)value=([^&]*)/g;
var myString = "value=8kadctgwqqe0&value=8kaczvfgoyrs&value=8kwkgz2ysm1i";
match = myRegexp.exec(myString);
while (match != null) {
console.log(match[1]);
match = myRegexp.exec(myString);
}
如果您对这些按键感兴趣,可以使用:
/(?:^|&)([^=&]*)=([^&]*)/g
在每种迭代的情况下,密钥可以在第一个匹配中找到,而值在第二个匹配中找到:
var myRegexp = /(?:^|&)([^&=]*)=([^&]*)/g;
var myString = "value=8kadctgwqqe0&value=8kaczvfgoyrs&value=8kwkgz2ysm1i";
match = myRegexp.exec(myString);
while (match != null) {
console.log(match[1]); //key
console.log(match[2]); //value
match = myRegexp.exec(myString);
}
答案 3 :(得分:1)
这也有效:
str.match(/value=([^&]*)/g).join("").split('value=').splice(1)