Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 提取多个字符串_Javascript_Regex - Fatal编程技术网

Javascript 提取多个字符串

Javascript 提取多个字符串,javascript,regex,Javascript,Regex,我试图从以下类型的输入中提取多个参数字符串: var paramsString=“first='somevalue'second='另一个值'third='另一个' 对于生成的对象: var paramsObject = { first: 'somevalue', second: 'another value', third: 'another' }; 我最初以为我可以执行paramsString.split(“”),但后来我意识到(如上所示),有些值中可能有空

我试图从以下类型的输入中提取多个参数字符串:

var paramsString=“first='somevalue'second='另一个值'third='另一个'

对于生成的对象:

var paramsObject = { 
    first: 'somevalue', 
    second: 'another value', 
    third: 'another' 
};
我最初以为我可以执行
paramsString.split(“”
),但后来我意识到(如上所示),有些值中可能有空格

然后我想也许是一个正则表达式,比如:

paramsObject.first = paramsString.match("first='(.*)'")[0];
但这一直延伸到第三个
值之后的最后一个
字符

我可以使用
indexOf()
substring
来实现这一点,但这似乎非常冗长,尤其是在扩展到更多参数时


做这件事最有效、最简洁的方法是什么?

你就快到了。但是,您应该记住,您不希望捕获任何(.*),而是要捕获任何不指示值或“”结尾的内容


因此,类似于
/\w+='([^']*)/g
的内容应该满足您的要求(我假设键名不会涉及任何复杂的内容)。有关工作示例,请参见。希望有帮助

你就快到了。但是,您应该记住,您不希望捕获任何(.*),而是要捕获任何不指示值或“”结尾的内容


因此,类似于
/\w+='([^']*)/g
的内容应该满足您的要求(我假设键名不会涉及任何复杂的内容)。有关工作示例,请参见。希望有帮助

您可以尝试以下方法:

var paramString = "first='somevalue' second='another value' third='another'"
paramString.match(/\w+='.*?'/g).reduce(function(prev, curr) {
    var parts = curr.split('=');
    prev[parts[0]] = parts[1].replace(/(^'|'$)/g, '');
    return prev;
}, {});

在与
/\w+='.*?'/g
regexp匹配后,power of将剩余的匹配数组转换为对象。

您可以尝试以下方法:

var paramString = "first='somevalue' second='another value' third='another'"
paramString.match(/\w+='.*?'/g).reduce(function(prev, curr) {
    var parts = curr.split('=');
    prev[parts[0]] = parts[1].replace(/(^'|'$)/g, '');
    return prev;
}, {});

在与
/\w+='.*?'/g
regexp匹配后,power of会将剩余的匹配数组转换为对象。

您可以使用while循环和regex从字符串中不断检索键/值,并每次删除字符串的该部分,直到regex不再匹配为止。像这样的事情应该做你想要的

var paramsString = "first='somevalue' second='another value' third='another'",
    paramsObject = {};

while ((matches = /^ ?([^=]+)='([^']+)' ?/.exec(paramsString))) {
    paramsString = paramsString.substr(matches[0].length);
    paramsObject[matches[1]] = matches[2];
}

您可以使用while循环和正则表达式不断从字符串中检索键/值,并每次删除字符串的该部分,直到正则表达式不再匹配为止。像这样的事情应该做你想要的

var paramsString = "first='somevalue' second='another value' third='another'",
    paramsObject = {};

while ((matches = /^ ?([^=]+)='([^']+)' ?/.exec(paramsString))) {
    paramsString = paramsString.substr(matches[0].length);
    paramsObject[matches[1]] = matches[2];
}
您将拥有:

{
    a_1 : "someValue",
    a_2 : "another value",
    a_3 : "another"
}
您将拥有:

{
    a_1 : "someValue",
    a_2 : "another value",
    a_3 : "another"
}

另一种方法是使用
exec
而不是
match
。主要优点是,
exec
返回的对象已包含匹配的组,无需进一步处理:

var paramsObject = {};
var paramsString = "first='somevalue' second='another value' third='another'";
var re = /(\w+)='([\w ]+)'/gi;

while((ma = re.exec(paramsString)) != null){
    paramsObject [ma[1]] = ma[2];
}

有关更多详细信息,请参阅MDN上的参考资料。

另一种方法,使用
exec
而不是
match
。主要优点是,
exec
返回的对象已包含匹配的组,无需进一步处理:

var paramsObject = {};
var paramsString = "first='somevalue' second='another value' third='another'";
var re = /(\w+)='([\w ]+)'/gi;

while((ma = re.exec(paramsString)) != null){
    paramsObject [ma[1]] = ma[2];
}
有关更多详细信息,请参阅MDN上的参考资料