gpt4 book ai didi

javascript - 将 HTML 中的链接转换为 anchor

转载 作者:行者123 更新时间:2023-11-28 06:41:17 25 4
gpt4 key购买 nike

我有一个 HTML 文本,需要用 anchor 替换链接(例如 www.so.com)。

输入是:

<p>Hi I have a nice website on www.so.com and would...</p>
<p>Click <a href='http://www.so.com'>this link</a></p>

输出应返回:

<p>Hi I have a nice website on <a href='www.so.com'>www.so.com</a> and would...</p>
<p>Click <a href='http://www.so.com'>this link</a></p>

棘手的部分是 HTML 文本中已有的 anchor 。

我正在努力解决迄今为止所得到的解决方案。过滤器第一次用 anchor 替换链接,第二次也是......

.filter('autolink', ['$sanitize', function ($sanitize) {
var LINKY_URL_REGEXP =
/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
MAILTO_REGEXP = /^mailto:/i;

return function (text, target, attributes) {
if (!text) return text;
var match;
var raw = text;
var html = [];
var url;
var i;
while ((match = raw.match(LINKY_URL_REGEXP))) {
// We can not end in these as they are sometimes found at the end of the sentence
url = match[0];
// if we did not match ftp/http/www/mailto then assume mailto
if (!match[2] && !match[4]) {
url = (match[3] ? 'http://' : 'mailto:') + url;
}
i = match.index;
addText(raw.substr(0, i));
addLink(url, match[0].replace(MAILTO_REGEXP, ''));
raw = raw.substring(i + match[0].length);
}
addText(raw);
return html.join('');

function addText(text) {
if (!text) {
return;
}
html.push(text);
}

function addLink(url, text) {
var key;
html.push('<a ');
if (angular.isFunction(attributes)) {
attributes = attributes(url);
}
if (angular.isObject(attributes)) {
for (key in attributes) {
html.push(key + '="' + attributes[key] + '" ');
}
} else {
attributes = {};
}
if (angular.isDefined(target) && !('target' in attributes)) {
html.push('target="',
target,
'" ');
}
html.push('href="',
url.replace(/"/g, '&quot;'),
'">');
addText(text);
html.push('</a>');
}
};

最佳答案

您可以借showdown.js用于解析链接的正则表达式。它将解析纯文本并忽略 HTML。

\b(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+)(?=\s|$)(?!["<>])

regex101.com test

请记住,在以下(奇怪的 html)情况下,它会错误解析:

  • <a href="www.google.com ">bla</a>
  • <a href="www.google.com\n">bla</a> (\n 是换行符)

关于javascript - 将 HTML 中的链接转换为 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33783154/

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