正则表达式找到=之后的字符串

时间:2013-05-27 14:43:16

标签: javascript regex

我真的很新的正则表达式,我一直在寻找答案,但要么它不工作或我得到某种错误所以我会试着问问题和hopefulyl有人可以指导我通过它:)

我有一个字符串,如下所示:

  

str =“car [brand = saab] [wheels = 4]”

我不知道你是否可以直接获得几个不同的比赛,或者你是否需要不同的.match()但无论如何。

我需要在1变量中的第一个[]之前的所有内容。

然后我需要在另一个中使用saab,在第三个中需要4个。

6 个答案:

答案 0 :(得分:7)

带有回调函数的

.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 :(得分:3)

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

([^\[]*)\[[^=]+=([^\]]*)\]\[[^=]+=([^\]]*)\]

然后,您可以抓取匹配组#1,#2和#3

现场演示:http://www.rubular.com/r/XNZfHcMAp8

在Javascript中:

str = 'car[brand=saab][wheels=4]';
console.log('match::' + str.match(/([^[]*)\[[^=]+=([^\]]*)\]\[[^=]+=([^\]]*)\]/));

答案 2 :(得分:1)

我认为这应该有效:

([^[]+)(?:\[[^=]+=([^\]]+)\])+

解释:

([^[])首先,你匹配所有不是[。

(?:...)+然后,当你找到它时,你就开始重复一个模式

\[[^=]查找不是=的所有内容,然后将其丢弃。

([^\]])查找不是]的所有内容并将其捕获。

答案 3 :(得分:1)

/([^\[]+)\[brand=([^\]]+)\]\[wheels=(\d)\]/

作品。

尝试

var result = "car[brand=saab][wheels=4]".match(/([^\[]+)\[brand=([^\]]+)\]\[wheels=(\d)\]/)

结果将是

[ "car[brand=saab][wheels=4]", "car", "saab", "4" ]

答案 4 :(得分:0)

你可以一次性完成匹配,并获得一个阵列。

以下行在chrome console中测试:

str = "car[brand=saab][wheels=4]";
"car[brand=saab][wheels=4]"
str.match(/[^=[\]]+(?=[[\]])/g)
["car", "saab", "4"]

答案 5 :(得分:0)

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]"));