我对正则表达式真的很陌生,我一直在四处寻找答案,但要么它不起作用,要么我遇到某种错误,所以我会尝试提出这个问题,希望有人可以指导我完成它:)
我有一个看起来像这样的字符串:
str =“汽车[品牌=萨博][车轮=4]”
我不知道您是否可以直接获得几个不同的匹配项,或者您是否需要不同的 .match() 但无论如何。
我需要 1 个变量中第一个 [] 之前的所有内容。
然后我需要另一个萨博,第三个需要4个。
我对正则表达式真的很陌生,我一直在四处寻找答案,但要么它不起作用,要么我遇到某种错误,所以我会尝试提出这个问题,希望有人可以指导我完成它:)
我有一个看起来像这样的字符串:
str =“汽车[品牌=萨博][车轮=4]”
我不知道您是否可以直接获得几个不同的匹配项,或者您是否需要不同的 .match() 但无论如何。
我需要 1 个变量中第一个 [] 之前的所有内容。
然后我需要另一个萨博,第三个需要4个。
.replace
在 javascript 中解析自定义格式时,使用回调函数是您的首选工具。考虑:
parse = function(s) {
var result = {};
s.replace(/^(\w+)|\[(.+?)=(.+?)\]/g, function($0, $1, $2, $3) {
result[$2 || "kind"] = $1 || $3;
});
return result;
}
例子:
str = "car[brand=saab][wheels=4][price=1234][morestuff=foobar]"
console.log(parse(str))
// {"kind":"car","brand":"saab","wheels":"4","price":"1234","morestuff":"foobar"}
您可以使用此正则表达式:
([^\[]*)\[[^=]+=([^\]]*)\]\[[^=]+=([^\]]*)\]
然后您可以抓住匹配组#1、#2 和#3
在 Javascript 中:
str = 'car[brand=saab][wheels=4]';
console.log('match::' + str.match(/([^[]*)\[[^=]+=([^\]]*)\]\[[^=]+=([^\]]*)\]/));
/([^\[]+)\[brand=([^\]]+)\]\[wheels=(\d)\]/
作品。
试试看
var result = "car[brand=saab][wheels=4]".match(/([^\[]+)\[brand=([^\]]+)\]\[wheels=(\d)\]/)
结果将是
[ "car[brand=saab][wheels=4]", "car", "saab", "4" ]
我认为这应该有效:
([^[]+)(?:\[[^=]+=([^\]]+)\])+
说明:
([^[])
首先,匹配所有不是 [.
(?:...)+
然后,当你找到它时,你就开始重复一个模式
\[[^=]
找出所有不是 = 的东西,然后丢弃它。
([^\]])
找到不是 ] 的所有内容并捕获它。
you could do it with match in one shot, and get an array back.
below lines were tested in chrome console:
str = "car[brand=saab][wheels=4]";
"car[brand=saab][wheels=4]"
str.match(/[^=[\]]+(?=[[\]])/g)
["car", "saab", "4"]
function getObject(str) {
var props = str.split(/\[(.*?)\]/g),
object = {};
if (props.length) {
object.name = props.shift();
while (props.length) {
var prop = props.shift().split("=");
if(prop.length == 2){
object[prop[0]] = prop[1];
}
}
}
return object;
}
console.log(getObject("car[brand=saab][wheels=4]"));