正则匹配文本中的链接

  最近做的一个项目中遇到使用正则匹配一段文本中的 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;
}

转载于:https://www.cnblogs.com/yaoyuqian/p/8241711.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值