我需要捕获字符串中的每个%{string}
sequience。
我创建了一个RegExp:
/[^%]*(%{[^}]+})?/g
,
它在regex101.com(https://regex101.com/r/aB2xL5/1)上的字符串Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}
上正常工作,但在JS中不正确:
var a='Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}'.match(/[^%]*(%{[^}]+})?/g);
我做错了什么?
console.log(a); //['Lorem %{ipsum}', ' dolor %{sit}', ' amet adipiscing aenean %{consectetuer}', '']
我需要什么:
Input string: 'abc %{def} ghi %{jkl}'
Output array: ['%{def}','%{jkl}']
答案 0 :(得分:0)
如评论中所述,不要访问整个匹配,即使在regex101上,也包含超出您需要的匹配,而是访问匹配的第一组。
为此,请使用Regex.prototype.exec
代替String.prototype.match
:
var regex=/[^%]*(%{[^}]+})?/g;
var data='Lorem %{ipsum} dolor %{sit} amet adipiscing aenean %{consectetuer}';
var result=[];
var match;
while (match = regex.exec(data)) {
result.push(match[1]); // match the first group of the result
}
编辑:我刚看到托马斯的评论,这比这个解决方案要好得多。我会把它留在这里,因为它确实解决了你的问题,并解释了如何捕获组,但你应该使用他的正则表达式。