Regexp:只捕获括号内的内容

Regexp: only capturing a stuff within parenthesis

本文关键字:Regexp      更新时间:2023-09-26

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

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

给我:

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

同时我想:

["name", "age"]

您需要使用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中,您不必转义{}。此外,为了提高效率,可以使用否定字符类[^{}],该类与{}之外的任何字符相匹配。

Regex解释:

  • %{-匹配文字%{
  • ([^{}]+)-组1:匹配除{}之外的1个或多个字符
  • CCD_ 15-一个文字CCD_ 16