javascript - 如何匹配 URL 但不在括号中

标签 javascript regex url

我的网址可能位于括号内,如下所示:

[[!;;;;http://example.com/foo]some text]

如何匹配 URL,但当它们位于括号中时则不然,某些文本 也可能是 URL。我需要将所有网址替换为该格式。

到目前为止,我有匹配 URL 的正则表达式:

var url_re = /(\bhttps?:\/\/(?:(?:(?!&[^;]+;)|(?=&amp;))[^\s"'<>\]\[)])+\b)/gi;

输入示例:

http://example.com/foo [[!;;;;http://example.com/foo]some text] http://example.com/foo

输出:

[[!;;;;http://example.com/foo]http://example.com/foo] [[!;;;;http://example.com/foo]some text] [[!;;;;http://example.com/foo]http://example.com/foo]

最佳答案

您可以添加一个 (?![^[\]]*]) 否定前瞻,以避免在结束 ] 之前匹配模式任何其他 []:

\b(https?:\/\/(?:(?:(?!&[^;]+;)|(?=&amp;))[^\s"'<>\][)])+)\b(?![^[\]]*])

并替换为[[!;;;;$1]$1]。请参阅regex demo

另一个选项是匹配并捕获 [...[...]...] 内的所有内容,然后在 String.replace() 内使用回调正确处理每个捕获,但上面看起来“更干净”并且更直接。

关于javascript - 如何匹配 URL 但不在括号中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36977571/

相关文章:

javascript - Amazon S3 视频无法以 HTML 格式运行

javascript - 迭代一周中的几天

javascript - 如何在 Node.js 中将非 ASCII 引号替换为 ASCII 引号?

c# - .Net 正则表达式是否有小写表达式?

url - Joomla URL 规范化

javascript - 打开多个选项卡但只有一个与服务器通信

javascript - 如何从另一个页面更改 iframe src

c# - DotNetOpenAuth - 如何使其在负载均衡器后面工作?

c# - 如何修剪空格?

c# - ASP.NET MVC 查询在未请求时部署了应用程序服务器地址