对HTML属性进行Regex多重匹配

Regex multiple matches for HTML attributes

本文关键字:Regex HTML 属性      更新时间:2023-09-26

我想用JavaScript正则表达式匹配多个data-i18n属性。

我尝试了以下正则表达式:

var regexp = /(data'-i18n="[^"]+")/g;

在我的脑海里,这似乎很直接,但最终没有奏效。

如果您尝试在以下HTML标签上匹配:

<a random-attr="ok" data-i18n="first match" data-i18n="second match">my text</a>

做这样的高管:

/(data'-i18n="[^"]+")/g.exec('<a random-attr="ok" data-i18n="first match" data-i18n="second match">my text</a>')

将引发以下问题:

  • 有两个匹配项,但它们实际上是重复的匹配项

结果是:

[ 'data-i18n="first match"',
  'data-i18n="first match"',
  index: 20,
  input: '<a random-attr="ok" data-i18n="first match" data-i18n="second match">my text</a>' ]
  • 关于如何为我的属性设置多个匹配项,有什么想法吗

提前感谢!

问题不在于正则表达式;它与你期望exec的行为方式有关。exec的返回值在位置0处具有完全匹配,然后是其后的每个捕获组的匹配。由于您将整个正则表达式封装在一个捕获组中,因此在数组的0和1位置可以看到相同的字符串。

将全局正则表达式与exec一起使用的正确方法是继续调用exec,直到它返回null;它每次都会返回下一场比赛。但是,如果您使用String.match(Regexp),它将返回您所期望的内容——一个包含所有匹配项的数组。