展开目录
让js支持带命名的正则表达式
javascript正则
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

js正则功能很强大,但替换的元素只能用下标来取未免太过于麻烦,因此我简单的封装了一个支持命名的正则替换方法。

/*!
 * replace2正则扩展方法
 *
 * https://treemonster.github.io/
 * author: treemonster
 * email: <admin@xdelve.com>
 *
 * Copyright treemonster
 * Released under the MIT license
 *
 * Date: 2016-12-13T19:56Z
 */
void function(){
  String.prototype.replace2=function(xreg,callback){
    var regstr=xreg.toString();
    var regn=[0];
    regstr=regstr.replace(/\$([a-z\d\_]+)\=/ig,function(a,b){
      regn.push(b);
      return '';
    });

    var r;
    regstr.replace(/^\/(.+?)\/([ig]*)$/g,function(a,b,c){
      r=new RegExp(b,c);
    });
    return this.replace(r,function(){
      var res={};
      var a=arguments;
      for(var i=1;i<=9;i++)
        if(a[i]===0)break;
        else if(typeof regn[i] === 'undefined');
        else res[regn[i]]=a[i];
      if(typeof callback==='function') return callback(res);
      return callback.replace(/\$([a-z\d]+)/ig,function(a,b){
        return res[b];
      });
    });
  };
}();

// 回调式
console.log('apple: 12; banana: 13;'.replace2(/($name=[a-z]+)\:\s*($count=\d+)/g,function(x){
  return x.name+'=>'+x.count;
}));

// 字符串式
console.log('apple: 12; banana: 13;'.replace2(/($name=[a-z]+)\:\s*($count=\d+)/g,'$name=>$count'));

输出结果:

apple=>12; banana=>13;
apple=>12; banana=>13;

相关文档

暂无

随便看看

  1. react项目webpack打包时拆分异步加载的文件

  2. 华为等国产手机rem宽度超过实际宽度

  3. npm远程服务器某些配置不兼容代理的解决办法

  4. git删除远程分支

  5. html5 全屏代码

  6. npm设置仓库地址和代理

  7. webrtc服务搭建

  8. webrtc泄漏本地ip信息

  9. dd备份/还原

  10. webpack使用外部资源

  11. TIME_WAIT过多

  12. mongodb2.4 添加用户

  13. mysql导出csv文件

  14. 树莓派配置收发邮件

  15. 树莓派配置wifi

  16. mysql选取内容导出到文件

  17. 猴子选大王算法问题

  18. centos7 开放或者关闭端口

  19. youku电脑版跳过广告代码

  20. 配置mysql ssl连接

畅言模块加载中