【发布时间】:2020-12-24 09:12:43
【问题描述】:
我想做的是
当有这样的文字This is a link: https://website.com hahaha它应该把它变成
This is a link: <a href="https://website.com" target="_blank">https://website.com</a> hahaha
但是当我有
This is a link: <a href="https://website.com" target="_blank">https://website.com</a> hahaha 它不应该做任何事情。
目前我有这个功能
static linkify(inputText: string): string {
// URLs starting with http://, https://, or ftp://
const replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim
let 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).
const replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim
replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>')
// Change email addresses to mailto:: links.
const replacePattern3 = /(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/gim
replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>')
return replacedText
}
当我输入
<a href="https://website.com" target="_blank">https://website.com</a>
它给了我
<a href="<a href="https://website.com" target="_blank">https://website.com</a>" target="_blank"><a href="https://website.com" target="_blank">https://website.com</a></a>
将所有https://website.com 替换为<a href="https://website.com" target="_blank">https://website.com</a>
我怎么能不让它取代那些?
谢谢
【问题讨论】:
-
那么你为什么不添加一个正则表达式来检查 inputText 是否已经是一个 HTML 元素,如果是这样的话就直接返回它而不做任何修改
标签: javascript html regex