javascript,正则表达式用大括号解析字符串内容

时间:2012-03-20 18:02:56

标签: javascript regex string-parsing

我是正则表达式的新手。我试图解析字符串中大括号内的所有内容。我查了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}"]

我怎样才能得到没有括号的字符串?

5 个答案:

答案 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

在javascript中阅读有关正则表达式的好地方是here,一个值得测试的好地方是here

祝你好运!

答案 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