如何匹配URL但不在括号中

时间:2016-05-02 07:53:05

标签: javascript regex url

我的网址可能在这样的括号内:

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

如何匹配网址,但是当它们在括号中时不会匹配,some text也可能是网址。我需要将所有网址替换为该格式。

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

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]

1 个答案:

答案 0 :(得分:1)

您可以添加./build/tools/caffe time -model /path/to/deploy.prototxt -weights /path/to/caffemodel -gpu all 否定前瞻,以避免在结束(?![^[\]]*])之前与之前的任何其他][匹配模式:

]

并替换为\b(https?:\/\/(?:(?:(?!&[^;]+;)|(?=&amp;))[^\s"'<>\][)])+)\b(?![^[\]]*]) 。请参阅regex demo

另一种选择是匹配并捕获所有内部[[!;;;;$1]$1],然后在[...[...]...]内使用回调来正确处理每次捕获,但上面看起来更“干净”且更直接。