Javascript 正则表达式HTML属性的多个匹配项

Javascript 正则表达式HTML属性的多个匹配项,javascript,regex,node.js,Javascript,Regex,Node.js,我想将多个data-i18n属性与JavaScript regexp匹配 我尝试了以下regexp: var regexp = /(data\-i18n="[^"]+")/g; 在我的脑海里,这似乎相当直截了当,但它最终不起作用 如果尝试匹配以下HTML标记: <a random-attr="ok" data-i18n="first match" data-i18n="second match">my text</a> 我的文本 像这样做一个执行官: /(data\

我想将多个
data-i18n
属性与JavaScript regexp匹配

我尝试了以下regexp:

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>')
/(数据\-i18n=“[^”]+”)/g.exec(“我的文本”)
将提出以下问题:

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

[ '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>' ]
['data-i18n=“首次匹配”,
“data-i18n=”第一个匹配“,
索引:20,
输入:“我的文本”]
  • 关于如何对我的属性进行多个匹配,有什么想法吗

提前感谢!

问题不在于您的正则表达式;而在于您期望
exec
的行为方式。
exec
的返回值在位置0处完全匹配,然后是每个捕获组的匹配。因为您将整个正则表达式包装在一个捕获组中,所以在位置i处看到的字符串是相同的数组的0和1上


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

问题不在于您的正则表达式;而在于您期望
exec
的行为方式。
exec
的返回值在位置0处完全匹配,然后是每个捕获组的匹配。因为您将整个正则表达式包装在作为一个捕获组,您将在数组的位置0和1处看到相同的字符串


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

哦,天哪,不,我想是时候使用
文档了。getElementsByTagName('a')[0]。getAttribute('data-i18n'))
而且你不能有两个同名的属性。我不是客户端,所以没有选择器。我也没有试图为HTML编写一个只匹配一个特定标记的标记器,这应该不会很复杂。你的正则表达式似乎适合我->哦,天哪,不,我想是时候使用
document.getElementsByTagName('a')[0]。getAttribute('data-i18n')
而且你不能有两个同名的属性。我不是客户端,所以没有选择器。我也不想为HTML编写一个标记器,只匹配一个特定的标记,这应该不是很复杂。你的正则表达式似乎对我有用->