从字符串中提取参数的子字符串的值

Extract values of substring of parameters from string

本文关键字:字符串 提取 参数      更新时间:2023-09-26

我有一个形式的字符串

p1=v11&p1=v12&p2=v21&p2=v22&p2=v23&p3=v31 and so on

我想在javascript中获得p2的所有值的数组,例如,在本例中,它将是["v21"、"v22"、"v23"]。

我该怎么做?我需要使用正则表达式吗?

您可能想看看我为模仿PHP中的$_GET函数而编写的JavaScript函数:

http://www.martinandersson.com/matooltip/js/ma_GET.js

谷歌这行的源代码:

returnMe[key] = $.parseJSON( decodeURIComponent(tmpArray[1]) );

我当前实现的问题是,任何已经存储的旧密钥的值都将被覆盖。您需要做的是检查键是否已经存在,如果已经存在,请读取旧值并将其存储回数组中,然后再将新值推送到同一数组中。

我引用的特定行使用JQuery将该值生成一个JavaScript对象。如果您不想将JQuery用于此功能,那么可以使用JSON.parse或其他第三方库。

希望有帮助,如果你没有成功,给我写一条评论,我会回复你的。

试试这个:

var string = 'p1=v11&p1=v12&p2=v21&p2=v22&p2=v23&p3=v31';
var rawParams = string.split('&');
var params = [];
var param = '';
for (var i in rawParams) {
    param = rawParams[i].split('=');
    if ('p2' == param[0]) {
        params.push(param[1]);
    }
}

我在这里不推荐RegExp,因为这个问题很容易通过一个简单的for循环来解决。

编辑
为了任何仇恨者,下面是的工作示例:http://jsfiddle.net/j7sY6/1/

对于正则表达式解决方案:

var matchs = [];
var re = /p2=([^&]+)/g;
while (match = re.exec('p1=v11&p1=v12&p2=v21&p2=v22&p2=v23&p3=v31')) {
   matchs.push(match[1]);
}

输出:

matches = ["v21", "v22", "v23"]