正则表达式:仅捕获括号内的内容

时间:2016-01-08 17:41:13

标签: javascript regex

在JavaScript中,我想捕获像%{VAR}这样的东西。 以下代码:

"I am %{name} and I am %{age}".match(/%\{(.+?)\}/g);

给我:

["%{name}", "%{age}"]

同时我想:

["name", "age"]

1 个答案:

答案 0 :(得分:1)

您需要使用RegExp#exec并在循环中调用它。 String#match()失去所有捕获组。

var re = /%{([^{}]+)}/g; 
var str = 'I am %{name} and I am %{age}';
var m, arr = [];
 
while ((m = re.exec(str)) !== null) {
   arr.push(m[1]);
}
document.body.innerHTML = JSON.stringify(arr, 0, 4);

此外,您可以使用改进的正则表达式:%{([^{}]+)}

在JS中,您不必转义{}。另外,为了提高效率,您可以使用否定字符类 [^{}]来匹配{} 之外的任何字符

正则表达式解释:

  • %{ - 匹配文字%{
  • ([^{}]+) - 第1组:匹配{}以外的1个或多个字符
  • } - 文字}