gpt4 book ai didi

javascript - 用于替换 mailto 链接的正则表达式 (Javascript)

转载 作者:行者123 更新时间:2023-12-01 03:33:20 25 4
gpt4 key购买 nike

我想编写一个 Javascript 函数来替换包含 mailto 链接的 href 标签。

<a href="mailto:foo@bar.com">Email me</a>!

应该变成:

<a href="&lt;%='mailto:foo@bar.com'%&gt;">Email me</a>!

这是一个将 HTML 提供给第三方服务的应用程序,该服务已损坏,因为它不接受 mailto URL,但如果我们将其屏蔽为变量,它将接受它。我只是很难将我的不适合正则表达式的大脑只替换 href 标签的内部部分。

非常感谢您的帮助!

最佳答案

您无法使用正则表达式完全解析 HTML,但您可以使用 HTML 解析器,仅使用正则表达式解析和替换 anchor 标记的 href 属性。

以下规范是相关的:

The href attribute on a and area elements must have a value that is avalid URL potentially surrounded by spaces....

A string is a valid URL potentially surrounded by spaces if, afterstripping leading and trailing white space from it, it is a valid URL....

A URL is a valid URL if it conforms to the authoring conformancerequirements in the WHATWG URL specification. [URL]

参见http://w3c.github.io/html/single-page.html#valid-url

An absolute-URL string must be [...] a URL-scheme string that is an ASCII case-insensitive match for a special scheme and not an ASCII case-insensitive match for "file", followed by U+003A (:) and a scheme-relative-special-URL string ...

参见https://url.spec.what

因此,一个强大的正则表达式必须不区分大小写并接受空格:

let href = " MailTO:bob@example.com  ";
let result = href.replace(/^\s*mailto:.*$/i, "&lt;%='$&'%&gt;");
console.log(result);

虽然您也可以使用正则表达式解析 anchor 元素属性,但您需要一个 HTML 解析器来查找 HTML 文档中的 anchor 元素。而且由于无论如何您都需要 HTML 解析器,因此您也可以依靠它来提取 anchor 元素及其 href 属性。

关于javascript - 用于替换 mailto 链接的正则表达式 (Javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44419859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com