我正在使用这个表达式:
"g{field1}={field2}a".match(/{([^\{\}]+)\}/g)
我需要的是获取“field1”和“field2”,但它返回一个带有“{field1}”和“{field2}”的数组。
我正在使用这个表达式:
"g{field1}={field2}a".match(/{([^\{\}]+)\}/g)
我需要的是获取“field1”和“field2”,但它返回一个带有“{field1}”和“{field2}”的数组。
您可以使用exec
which 可以为每个匹配返回多个捕获组。
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);
如果你只想要一个没有花括号的数组,你可以使用数组映射方法:
"g{field1}={field2}a".match(/{([^\{\}]+)\}/g).map(function(i){return i.slice(1,-1)})
你可以使用前瞻
"g{field1}={field2}a".match(/[^\{\}]+(?=\})/g)
这将匹配任何不是的字符,{
或者}
匹配的字符集后跟一个}
"g{field1}={field2}a".match(/([^g=a\{\}]+)/g)
返回
["field1", "field2"]
你也可以这样做:
'g{field1}={field2}a'.split(/[{}]/).filter(function(a,i){return i%2;});
前提是字符串始终包含匹配的“{}”对。还有:
'g{field1}={field2}a'.split(/^[^{]*\{|\}[^{]*\{|\}[^{]*$/g).slice(1,-1);
两者都适用于任意数量的 {…} 对(0 到 n)。