相当复杂的正则表达式

时间:2015-04-08 21:38:44

标签: javascript regex

我做了很多研究,但显然我的正则表达式技能还不足以解决这个问题,所以我谦卑地寻求建议。

我有一个JS var,它可以获得与此类似的字符串:

"value=8kadctgwqqe0&value=8kaczvfgoyrs&value=8kwkgz2ysm1i"

它没有固定的长度。它可能会返回1或20个值,但无法知道。

正如您所看到的,它会返回一大串值,这些值始终位于" value ="除了最后一个,没有"&"到底。 我需要解析它,并最终得到它:

8kadctgwqqe0
8kaczvfgoyrs
8kwkgz2ysm1i

我甚至不知道从哪里开始...... 非常感谢!

4 个答案:

答案 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个结果。这将使其得到正确的结果。

<小时/> 有时候使用常规的JavaScript字符串操作会更好(即使这看起来像是最糟糕的答案)

.filter()太棒了,more info on it here

答案 2 :(得分:1)

您可以使用以下正则表达式:

/(?:^|&)value=([^&]*)/g

regex101 demo

然后将匹配存储在第一个捕获组中。

您现在可以访问捕获组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)