我是正则表达式的新手。我试图解析字符串中大括号内的所有内容。我查了this post作为参考,完全按照其中一个答案提出,但结果出乎意料。
这就是我做的事情
var abc = "test/abcd{string1}test{string2}test" //any string
var regex = /{(.+?)}/
regex.exec(abc) // i got ["{string1}", "string1"]
//where i am expecting ["string1", "string2"]
我想我错过了什么,我做错了什么?
更新
我能够通过/g
获取全局搜索
var regex = /{(.*?)}/g
abc.match(regex) //gives ["{string1}", "{string2}"]
我怎样才能得到没有括号的字符串?
答案 0 :(得分:22)
"test/abcd{string1}test{string2}test".match(/[^{}]+(?=\})/g)
产生
["string1", "string2"]
它假设每个}
之前都有一个对应的{
,并且{...}
部分没有嵌套。它也不会捕获空{}
部分的内容。
答案 1 :(得分:2)
var abc = "test/abcd{string1}test{string2}test" //any string
var regex = /{(.+?)}/g
var matches;
while(matches = regex.exec(abc))
console.log(matches);
答案 2 :(得分:1)
试试这个:
var abc = "test/abcd{string1}test{string2}test" //any string
var regex = /{(.+?)}/g //g flag so the regex is global
abc.match(regex) //find every match
祝你好运!
答案 3 :(得分:0)
结果:
["{string1}", "string1"]
向您显示,对于第一场比赛,整个正则表达式匹配"{string1}"
,并且第一个捕获括号与"string1"
匹配。
如果你想得到所有的比赛并看到每场比赛的所有捕获牌,你可以使用“g”标志并循环,多次调用exec()
:
var abc = "test/abcd{string1}test{string2}test"; //any string
var regex = /{(.+?)}/g;
var match, results = [];
while (match = regex.exec(abc)) {
results.push(match[1]); // save first captured parens sub-match into results array
}
// results == ["string1", "string2"]
您可以在此处查看:http://jsfiddle.net/jfriend00/sapfm/
答案 4 :(得分:0)
没错。但是你需要查看你的捕获组(数组中的第二个元素)来获取你想要的内容(你可以忽略第一个)。为了解决所有问题,仅运行exec
一次是不够的,您需要使用match
循环结果。
编辑:永远不要明白,您无法使用match
访问捕获群组。一个更简单的解决方案是使用积极的前瞻,如Mike Samuel suggested。