Javascript 仅捕获纯文本http/https的正则表达式

Javascript 仅捕获纯文本http/https的正则表达式,javascript,regex,Javascript,Regex,我当前有str.match(/(http[^\s]+)/I),它不仅捕获内容中的链接,还捕获img标记(src=“http…”)和锚标记(href=“http…”)中的链接 如何修改我的正则表达式,使其仅与前面没有“src=”或“href=”的“http/s”匹配?您可以使用附加的\shref或src在URL前面不会有空格字符。在普通文本中,有一个空格 str.match(/\s(http[^\s]+)/i) 另请参见您可以捕获在http/s之前不以=或引号开头的链接: str.match(/

我当前有
str.match(/(http[^\s]+)/I)
,它不仅捕获内容中的链接,还捕获img标记(src=“http…”)和锚标记(href=“http…”)中的链接


如何修改我的正则表达式,使其仅与前面没有“src=”或“href=”的“http/s”匹配?

您可以使用附加的
\s
href
src
在URL前面不会有空格字符。在普通文本中,有一个空格

str.match(/\s(http[^\s]+)/i)

另请参见

您可以捕获在http/s之前不以=或引号开头的链接:

str.match(/[^=\"](http[^\s]+)/i)

您可以使用简单的
http[^\s]+
(=
http\s+
)进行匹配

我建议使用正则表达式来匹配标记外的文本,并将那些允许文本显示的标记列为白名单。以下是正则表达式:

/(?![^<]*>|[^<>]*<\/(?!p\b|td|pre))https?:\/\/[a-z0-9&#=.\/\-?_]+/gi

/(?![^ |[^]*首先获取所有文本节点并仅搜索这些节点可能是最简单的方法,但这取决于您正在执行的操作。您可以放置一些示例数据吗?也许用正则表达式解析HTML不是一个好主意,在使用正则表达式之前,您应该获取适当的元素,然后从这些元素中获取文本?