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;
相关文档
暂无
随便看看
畅言模块加载中