JavaScript中的正则表达式匹配太多了

时间:2013-11-08 13:48:55

标签: javascript regex

我正在使用这个表达式:

"g{field1}={field2}a".match(/{([^\{\}]+)\}/g)

我需要的是获取“field1”和“field2”,但它返回一个带有“{field1}”和“{field2}”的数组。

5 个答案:

答案 0 :(得分:3)

您可以使用exec,每次匹配可以返回多个捕获组。

var re = /{([^\{\}]+)\}/g,
    matches = [],
    input = "g{field1}={field2}a",
    match;

while (match = re.exec(input)) matches.push(match[1]);

console.log(matches);

你也可以重写你的正则表达式(这取决于输入字符串是什么):

var matches = "g{field1}={field2}a".match(/{([^}]+)}={([^}]+)}/).slice(1);

console.log(matches);

答案 1 :(得分:2)

如果您只想要一个没有花括号的数组,可以使用数组映射方法:

"g{field1}={field2}a".match(/{([^\{\}]+)\}/g).map(function(i){return i.slice(1,-1)})

答案 2 :(得分:1)

你可以使用前瞻

"g{field1}={field2}a".match(/[^\{\}]+(?=\})/g)

如果匹配的字符集后跟{

,则匹配任何不是}}的字符

答案 3 :(得分:0)

"g{field1}={field2}a".match(/([^g=a\{\}]+)/g)

返回

["field1", "field2"]

答案 4 :(得分:0)

你也可以这样做:

'g{field1}={field2}a'.split(/[{}]/).filter(function(a,i){return i%2;});

如果字符串始终包含匹配的“{}”对。还有:

'g{field1}={field2}a'.split(/^[^{]*\{|\}[^{]*\{|\}[^{]*$/g).slice(1,-1);

两者都适用于任意数量的{...}对(0到n)。