gpt4 book ai didi

javascript - 如何使此字符串替换代码与 `
` 标签一起使用?

转载 作者:太空狗 更新时间:2023-10-29 13:50:16 25 4
gpt4 key购买 nike

来自 here 上的一个问题关于将字符串中的普通文本替换为 URL ....如果链接文本被 <br/> 包围,我想让它工作标签。

这是我目前使用的代码,它在一个看似超链接的元素中“链接”文本:

function linkify(inputText) {
var replacedText, replacePattern1, replacePattern2, replacePattern3;

//URLs starting with http://, https://, or ftp://
replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');

//URLs starting with "www." (without // before it, or it'd re-link the ones done above).
replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');

return replacedText;
}

当然问题是如果链接文字是这样的:

<p>Is this:<br/><br/>http://www.google.com<br/><br/>THE best search engine around?</p>

然后我得到的输出结果就是这个!

<p>Is this:<a href="http://www.google.com">http://www.google.comTHE</a> best search engine around</p>

所以有两个问题是 <br/>标签被完全删除,并且 <br/> 之后的文本也被删除了标记 ('THIS') 被视为超链接文本的一部分。

我该如何克服这个小而致命的问题?

最佳答案

我会更多地依赖内置解析能力的浏览器,让浏览器找出什么是有效的 HTML 等。

像这样的东西应该可以工作

function linkify(inputText) {

var dom = new DOMParser(),
doc = dom.parseFromString('<div id="wrap">'+ inputText +'</div>', 'text/html'),
ref = doc.getElementById('wrap'),
reg = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi,
arr = [];

Array.prototype.forEach.call(ref.querySelectorAll('*'), function(node) {
Array.prototype.forEach.call(node.childNodes, function(innerNode) {
if (innerNode.nodeType === 3) arr.push(innerNode);
});
});

arr.forEach(function(node, index) {
node.nodeValue = node.nodeValue.replace(reg, function(x) {
var nxtNode = arr[index+1],
anchor = doc.createElement('a');

if (nxtNode && "nodeValue" in nxtNode) {
anchor.href = x;
anchor.innerHTML = nxtNode.nodeValue;
nxtNode.parentNode.removeChild(nxtNode);
node.parentNode.insertBefore(anchor, node);
node.parentNode.removeChild(node);
}
});
});

return ref.innerHTML;
}

会回来

<p>
<br><br>
<a href="http://www.google.com">THE best search engine around</a>
<br><br>
</p>`

保留所有中断,但将它们放在 anchor 之外

FIDDLE

关于javascript - 如何使此字符串替换代码与 `<br/>` 标签一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34109235/

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