regex验证以http | https | ftp开头或以.com | .tv结尾的url

时间:2011-03-17 09:45:46

标签: regex

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <script type="text/javascript">
  function create_urls(input)
    {
        var input = input.replace(/^((ht|f)tp(s?))\://([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(/\S*)?$/gim,'<a href="$&" class="my_link" target="_blank">$&</a>');
        document.getElementById('disply_id').innerHTML = input;
    } 
  </script>
 </HEAD>
 <BODY>
  <input type="text" id="replace_id"/>
  <input type="button" value="replace" onclick="create_urls(document.getElementById('replace_id').value);"/>
  <div id="disply_id">  
  </div>
 </BODY>
</HTML>

我想找到与&#34; http://google.com"匹配的网址。或https://www.google.com并将其放在锚标记

由于

1 个答案:

答案 0 :(得分:2)

从SELFHTML.org(德国网页)获取的example几乎完全相同。

var input= "foo bar http://google.com";
input = input.replace(/((ht|f)tps?:\/\/\S*)/g, '<a href="$1">$1<\/a>');

这将匹配以http,https或ftp协议开头的每个URL。

要处理仅.com.tv结尾的限制,您可以尝试这样做:

input.replace(/((\S*\.(com|tv))(\/\S*)?)/gi, '<a href="$1">$2<\/a>')

结合两种模式你可能会寻找这样的东西:(这里有一些限制)

input.replace(/((((ht|f)tps?:\/\/)?[^\/\s]+\.(com|tv))(\/\S*)?)/gi, '<a href="$1">$2<\/a>')

说明:

((ht|f)tps?:\/\/)?   - optional http:// or https:// or ftp:// or ftps://
[^\/\s]+             - URL domain containing no slash and no whitspace
\.(com|tv)           - ending .com or .tv (not optional! you may want to add more)
(\/\S*)?             - optional rest of URL after domain

P.S。在你的正则表达式中,你没有逃脱// \/\/

更新
我试试这种方法:

var regex = /((ht|f)tps?:\/\/\S*)/g;
var result = regex.exec(input);
if ( result != null && result.length > 1 ) {
  input = '<a href="' + result[1] + '">' + result[1] + '<\/a>';
} else {
  input = input.replace(/((\S*\.(com|tv))(\/\S*)?)/gi, '<a href="$1">$1<\/a>');
}