正則匹配文本中的鏈接


  最近做的一個項目中遇到使用正則匹配一段文本中的 url 並將其顯示為短連接的需求。

  顯示的文本包括為防止 xss 而用 js 處理過的帶有特殊符號的文本以及 php 直接渲染后的文本,所以需要兩個正則表達式。

// 匹配不帶特殊符號的文本的正則
var reg0 = /((((https?|ftp?):(?:\/\/)?)(?:[-;:&=\+\$]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\?\+=&;:%!\/@.\w_]*)#?(?:[-\+=&;%!\?\/@.\w_]*))?)/ig;
// 匹配帶有特殊符號的文本的正則
var reg1 = /((((https?|ftp?|http?):(?:(/)(/))?)(?:[-;:(&)=\+\$]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:=\+\$]+@)[A-Za-z0-9.-]+)((?:(/)[\+~%(/).\w-_]*)?\??(?:[-\?\+=(&);:%!(/)@.\w_]*)#?(?:[-\?\+=(&);%!(/)@.\w_]*))?)/ig;
function replaceSrc(txt, type){
  // 將長連接處理為短鏈接
    var urlReg = /[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/;
  
  // type 為 0 表示文本中不帶有特殊符號

    if( type == '0' ){
        reg = reg0;
  // type 為 1 表示文本經js處理過,帶有特殊符號
    }else if( type == '1' ){
        reg = reg1;
    }
    var result = txt.replace(reg,function(item){
        return "<a class='short_link' href='"+ item +"' target='_blank'>"+urlReg.exec(item)[0]+"</a>";
    });
    return result;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM