繁体   English   中英

正则表达式查找特定单词并从 html 中删除完整的标签属性

[英]Regex to find specific word and remove complete tag attrubute from html

我想在我的 HTML 文本中捕获javascript:*** ,当正则表达式找到它时,我希望它的属性也被删除,我还创建了一个正则表达式,但它没有涵盖所有情况,我附上了我的代码和该正则表达式未涵盖的情况。

正则表达式:

/(?<=<[_a-zA-Z][^<]*?)\s+href="javascript:[^"]*"/

不包括以下情况:

href='javascript:
href = "javascript:
href=" javascript:

href=
   "javascript:

所以我想要找到javascript:并删除其完整属性的东西

我们可以通过几种方式改进这一点。 看到这个正则表达式:

((?<=<[_a-zA-Z][^<]*?))\s+href\s*=\s*["']?\s*javascript:[^"<]*["']?
  • HTML 属性允许带引号' , "以及不带引号(只要 URL 中没有空格)。这在表达式中得到更正
  • \s*表示“零个或多个空白字符(空格、换行符等)”,因此我们可以忽略可选的空白。
  • 捕获第一部分,以便用$1替换将完全删除href

您可以在此处查看正在运行的正则表达式:
https://regex101.com/r/1SPJKy/1

它适用于以下测试用例:

<a href="javascript:console.log(document.cookie)"></a>
<a href='javascript:console.log(document.cookie)'></a>
<a href = "javascript:console.log(document.cookie)"></a>
<a href=" javascript:console.log(document.cookie)"></a>
<a href=javascript:console.log(document.cookie)></a>
<a 
href=
   "javascript:console.log(document.cookie)">
</a>

话虽如此,HTML 需要被解析。 将其用作 DOM,而不是文本。
AFAIK CKEditor 的 HTML 元素可作为 DOM 元素访问。 例如,您可以使用此 JavaScript 来 select 这些元素:

document.querySelectorAll('[href*=javascript]')

无论属性是如何编写的,这都会得到这些元素。 如果浏览器无法更正它,它不适用于损坏的 HTML。 但是正则表达式有同样的问题,无论如何都不会导致有效的href。
也许你试试看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM