2017-09-08 23 views
-1

こんにちはプロジェクトでは、URLを検索して&のメールを検索し、リンクで置き換えるための次のコードがあります。この作品は素晴らしいが、それは最後のスラッシュを持ってurlと末尾にスラッシュを一致させよ

https://www.example.com/

のようなURLと一致していません。

API.prototype.replaceURLS = function(str) { 

    var patterns = [ 
     "\\b((?:https?|ftp)://[^\\s\"'<>]?/+)\\b", 
     "\\b(www\\.[^\\s\"'<>]?/+)\\b", 
     "\\b(\\w[\\w.+-]*@[\\w.-]+\\.[a-z]{2,6})\\b" 
    ]; 

    var reg = new RegExp(patterns.join('|'), "gi"); 

    return str.replace(reg, function(match, url, www, mail) { 

     if (url) { 
      return "<a target='_blank' href=\"" + url + "\">" + url + "</a>"; 
     } 

     if (www) { 
      return "<a target='_blank' href=\"http://" + www + "\">" + www + "</a>"; 
     } 

     if (mail) { 
      return "<a href=\"mailto:" + mail + "\">" + mail + "</a>"; 
     } 

     // just in case... 
     return match; 

    }); 

}; 

正規表現:

\b((?:https?|ftp):\/\/[^\s"'<>]+)\b|\b(www\.[^\s"'<>]+)\b|\b(\w[\w.+-]*@[\w.-]+\.[a-z]{2,6})\b 
+0

正常に動作しますが、それさえ 'HTTPSを処理していないよう://が正しくwww.example.com' ? –

+0

https://regex101.com/ – Syd

+0

で試してみることができます - https://regex101.com/r/RrMTXz/1と一致しません。それはあなたの正規表現に誤りがあるため(部分的に)です。あなたの 'url'と' www'正規表現はスペース、引用符、 '<' or '> 'ではない1文字にマッチする' [^ \\ s \ "' <>]?/ '/'。私はあなたが望んでいないと思っています。 – ClasG

答えて

0

まあ、私はすべての\bのフラグを削除してしまったと

関連する問題