如何匹配URL但不在括号中

How to match URLs but not in brackets

本文关键字:何匹配 URL      更新时间:2023-09-26

我的URL可能在这样的括号内:

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

如何匹配URL,而不是当它们在这样的括号中时,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(?![^[']]*])

并用CCD_ 6代替。查看regex演示

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