【问题标题】:Regular Expression: Strip out data- attributes from HTML elements [duplicate]正则表达式:从 HTML 元素中去除数据属性 [重复]
【发布时间】:2015-12-07 04:36:51
【问题描述】:

我正在努力使用正则表达式。我想使用正则表达式从 html 元素中删除所有数据属性。例如,假设我有这个文本:

<a href="" data-foo data-foo-bar data-test="foo" data-foo='blah'>
  testing data-foo attributes.
</a>

我想删除所有数据-*,如果它在 HTML 标记内,但不是从文本中。结果应该是:

<a href="">
  testing data-foo attributes.
</a>

这就是我所拥有的,但它不恰当地从文本中删除了 data-*:

/(data-.+?=".*?")|(data-.+?='.*?')|(data-[a-zA-Z0-9-]+)/g

【问题讨论】:

  • 您使用哪种语言?
  • @ToniLeigh:JavaScript,但这个问题与语言无关。
  • @JohnnyOshika 我问有两个原因,首先应用程序的语法可能因语言而异(小点);其次,根据语言,可能有更好的方法来操作 HTML,具体取决于语言 DOM 函数和内置的 HTML 解析函数 - HTML 字符串的正则表达式操作非常困难
  • @ToniLeigh:看起来正则表达式很难解决这个问题,所以我不得不求助于字符串解析和迭代。

标签: html regex custom-data-attribute


【解决方案1】:

这是删除所有data-* 属性的方法。

// select all elements. Or just specific ones.
var elements = document.getElementsByTagName("*");

// use dataset api to delete all properties.
for (var i = 0; i < elements.length; i++) {
    for (var prop in elements[i].dataset) delete elements[i].dataset[prop];
}
<a href="" data-foo data-foo-bar data-test="foo" data-foo='blah'>
  testing data-foo attributes.
</a>

【讨论】:

  • 谢谢。如果我可以访问 DOM,这可能是一个很好的可行解决方案,但我没有。我正在寻找一些字符串操作。
  • 哦,好的。这是一个完全不同的故事,抱歉。
  • 我是一个真正的正则表达式菜鸟,但这对你有用吗https://regex101.com/r/mC6wM6/2?我什至不确定这是否是正确的方法。
  • @JohnnyOshika - 如果你可以在 HTML 字符串上运行 JavaScript,那么你就可以访问 DOM
  • @ToniLeigh - 不是真的,如果你不知道 OP 想要在其中进行字符串操作的环境或上下文,你不能仅仅假设有一个 DOM。 DOM 不是 JavaScript 语言的一部分。
猜你喜欢
  • 1970-01-01
  • 2013-08-02
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 2014-11-21
  • 2020-12-04
相关资源
最近更新 更多