Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 regex查找后面的字符串=_Javascript_Regex - Fatal编程技术网

Javascript regex查找后面的字符串=

Javascript regex查找后面的字符串=,javascript,regex,Javascript,Regex,我对regex非常陌生,我一直在四处寻找答案,但要么它不起作用,要么我遇到了某种错误,所以我会尝试问这个问题,希望有人能指导我: 我有一个字符串可以如下所示: str=汽车[品牌=萨博][车轮=4] 我不知道你是否可以直接得到几个不同的匹配,或者你是否需要不同的匹配,但无论如何 我需要1个变量中第一个[]之前的所有内容 然后我需要萨博在另一辆车上,第三辆车上有4辆。我认为这应该行得通: ([^[]+)(?:\[[^=]+=([^\]]+)\])+ 解释: [^[]首先,匹配所有不是[]的项 ?

我对regex非常陌生,我一直在四处寻找答案,但要么它不起作用,要么我遇到了某种错误,所以我会尝试问这个问题,希望有人能指导我:

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

str=汽车[品牌=萨博][车轮=4]

我不知道你是否可以直接得到几个不同的匹配,或者你是否需要不同的匹配,但无论如何

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


然后我需要萨博在另一辆车上,第三辆车上有4辆。

我认为这应该行得通:

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

[^[]首先,匹配所有不是[]的项

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

\[[^=]找到所有不是=,并丢弃它

[^\]]找到所有不属于“a”的内容并捕获它

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

试一试

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

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

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

([^\[]*)\[[^=]+=([^\]]*)\]\[[^=]+=([^\]]*)\]
然后可以绘制匹配组1、2和3的图形

现场演示: 在Javascript中:

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

你可以在一次射击中完成匹配,然后得到一个阵列

在chrome控制台中测试了以下行:

str = "car[brand=saab][wheels=4]";
"car[brand=saab][wheels=4]"
str.match(/[^=[\]]+(?=[[\]])/g)
["car", "saab", "4"]
在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"}

您希望以这种格式匹配的所有字符串都是吗?总是有两组[],还是不同?是否会有两个以上的不同属性?@melwil可能有0到多个[]@emisal thg435的答案看起来像是完全解决了您想要的问题,您可以将关键字和值放到一个映射中。在正则表达式中处理任意组确实没有更好的方法。我要说的是,您在其中至少缺少了几个+符号;在[^=]之后还缺少了a=+。其余的则不匹配。@blue112当前拥有的将只返回car和=4,使用@Talus change它仍然只返回car和4没有saabindeed,我认为它应该需要一些递归…比如@thg435I beleive,测试字符串实际上是car[brand=saab][wheels=4],而不是str=car[brand=saab][wheels=4]这太具体了:它只匹配两组[a=b][c=d]的东西,但遗憾的是没有[a=b]或[a=b][c=d][e=f]这样的东西它应该可以工作,但缺点是replace在语法上不适合这样使用它。我发现。与后处理器函数匹配仍然更合适。@Willem Mulder你能解释一下什么是replace在语法上不适合这样使用,以及它可能导致什么问题吗?谢谢你的回答,它工作得很好,但我只是想解释一下我发现如果我在代码的c端而不是Javascript端使用它,效果会更好。因此,如果你想知道c,你能在我的新问题中将你的答案转换为c吗?这个问题与c完全相同,但只是在c:@emissal中:@emissal.replace函数用于替换文本,而你不想替换文本,你想查找/匹配te因此,.match函数更适合。例如,请参见我关于其工作原理的答案。
str = "car[brand=saab][wheels=4][price=1234][morestuff=foobar]"
console.log(parse(str))
// {"kind":"car","brand":"saab","wheels":"4","price":"1234","morestuff":"foobar"}