2

我正在使用这个表达式:

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

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

4

5 回答 5

3

您可以使用execwhich 可以为每个匹配返回多个捕获组。

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);
于 2013-11-08T13:55:06.353 回答
2

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

"g{field1}={field2}a".match(/{([^\{\}]+)\}/g).map(function(i){return i.slice(1,-1)})
于 2013-11-08T13:53:30.393 回答
1

你可以使用前瞻

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

这将匹配任何不是的字符,{或者}匹配的字符集后跟一个}

于 2013-11-08T14:07:01.660 回答
0
"g{field1}={field2}a".match(/([^g=a\{\}]+)/g)

返回

["field1", "field2"]
于 2013-11-08T13:56:16.943 回答
0

你也可以这样做:

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

前提是字符串始终包含匹配的“{}”对。还有:

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

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

于 2013-11-08T14:14:45.747 回答