我正在使用这个表达式:
"g{field1}={field2}a".match(/{([^\{\}]+)\}/g)
我需要的是获取“field1”和“field2”,但它返回一个带有“{field1}”和“{field2}”的数组。
答案 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)。