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