【发布时间】:2020-10-19 13:14:11
【问题描述】:
我正在使用一个 linkify 函数,它使用正则表达式检测类似链接的模式,并用 a-tags 替换这些模式以显示可点击的链接。
正则表达式如下所示:
// http://, https://, ftp://
var urlPattern = /\b(?![^<]*>|[^<>]*<\/)(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim;
/* Some explanations:
(?! # Negative lookahead start (will cause match to fail if contents match)
[^<]* # Any number of non-'<' characters
> # A > character
| # Or
[^<>]* # Any number of non-'<' and non-'>' characters
</ # The characters < and /
) # End negative lookahead.
*/
并像这样替换链接:
return textInput.replace(urlPattern, '<a target="_blank" rel="noopener" href="$&">$&</a>')
正则表达式非常适用于文本链接。但是,我也在 HTML-Code 中使用它,例如
<ul><li>Link: https://www.link.com</li></ul> //linkify not working
<ul><li>Link: https://www.link.com <br/></li></ul> //linkify working
只有第二个例子起作用了。我不知道为什么行为会有所不同,很高兴能从你那里得到一些帮助。我的正则表达式应该是什么样子才能在不中断列表元素的情况下进行链接?
【问题讨论】:
标签: javascript html regex