0

我有这种情况,用户可能会输入带有或不带有http(s)://. 如果它在那里,我想拥有它,否则添加http://我自己。我有以下正则表达式模式:

正则表达式:\[url\](?:https?\:\/\/)?(.*?)\[\/url\]替换:<a href="$1">$1</a>

这使得这

[url]http://blog.sanspace.in[/url]
[url]https://blog.sanspace.in[/url]
[url]blog.sanspace.in[/url]
[url]blog.sanspace.in/scraperwiki[/url]
[url]www.sanspace.in[/url]

进入这个

<a href="http://blog.sanspace.in">http://blog.sanspace.in</a>
<a href="http://blog.sanspace.in">http://blog.sanspace.in</a>
<a href="http://blog.sanspace.in">http://blog.sanspace.in</a>
<a href="http://blog.sanspace.in/scraperwiki">http://blog.sanspace.in/scraperwiki</a>
<a href="http://www.sanspace.in">http://www.sanspace.in</a>

现在,我想做的就是这样。(如果可用,使用 http(s)。否则,使用 http)

<a href="http://blog.sanspace.in">http://blog.sanspace.in</a>
<a href="https://blog.sanspace.in">https://blog.sanspace.in</a>
<a href="http://blog.sanspace.in">http://blog.sanspace.in</a>
<a href="http://blog.sanspace.in/scraperwiki">http://blog.sanspace.in/scraperwiki</a>
<a href="http://www.sanspace.in">http://www.sanspace.in</a>

我尝试将其添加http(s)为一个组。

正则表达式:\[url\](https?\:\/\/)?(.*?)\[\/url\]替换:<a href="$1$2">$1$2</a>

ut,在这种情况下更换顺序$1$2是不同的。如果用户添加了http$1,则 URL 变为$1.

<a href="http://blog.sanspace.in">http://blog.sanspace.in</a>
<a href="https://blog.sanspace.in">https://blog.sanspace.in</a>
<a href="blog.sanspace.in">blog.sanspace.in</a>
<a href="blog.sanspace.in/scraperwiki">blog.sanspace.in/scraperwiki</a>
<a href="www.sanspace.in">www.sanspace.in</a>

注意最后 3 个 URL。在这里我必须添加http,但前提是我知道没有添加用户http。我不确定如何实现我的目标。

我在这里测试这个问题。http://regexr.com?3711a

4

1 回答 1

2

尝试以下正则表达式:

匹配 : \[url\](?:http(s)?\:\/\/)?(.*?)\[\/url\]

代替 : <a href="http$1://$2">http$1://$2</a>

正则表达式演示

由于您愿意插入http://原始字符串中不存在的内容,因此即使它存在,这里的想法也不是捕获它。而是仅捕获可选的s指示安全 http 到$1.

于 2013-11-01T14:51:57.270 回答