字符串的replace方法应用浅析
2024-05-06 14:22:58
供稿:网友
这两个参数都是必须的,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。对于replacement是函数的情况,给我们提供了很大的便利。
这有一个很简单的交换两个单词顺序的例子,如果不用repalce可以这么做:
代码如下:
(function(){
var str = 'click dblclick';
var result = str.split(//b/).reverse().join('')
console.log(result);
})()
这么做略显麻烦,用replace处理则显得清爽许多:
代码如下:
(function(){
var str = 'click dblclick';
var result = str.replace(//b(/w+)(/s+)(/w+)/b/,'$3$2$1');
console.log(result);
})();
再看另一个例子——给数字加上千分位:
代码如下:
(function(){
var number = 12345678900;
var result = (''+number).replace(/(/d)(?=(/d{3})+$)/g,'$1,');
console.log(result);
})();
不过现在要扯的是replacement作为函数的用法,所以多此一举的把上面的形式改成函数的形式:
代码如下:
(function(){
var str = 'click dblclick';
var result = str.replace(//b(/w+)(/s+)(/w+)/b/,function(all,$1,$2,$3){
return $3+$2+$1;
});
console.log(result);
})();
(function(){
var number = 12345678900;
var result = (''+number).replace(/(/d)(?=(/d{3})+$)/g,function(all,$1){
return $1 + ',';
});
console.log(result);
})();
所以replace无非是捕获匹配的项然后经过处理,作为返回值进行替换,只不过是函数的比较给力。
下面看一个比较实用的例子,大多数语言都有的格式化输出,比如C语言的printf:
代码如下:
(function(){
var str = '%s may have gone, but there is a time of %s';
var result = str.replace(/(%s)/g,function(){
return 'replacement';
})
console.log(result);
})()
这里有个问题就是,%s都是一样的,替换出来都是一样的,而且我们只能按照顺序来判断被替换的是哪一部分,如果添加一段,那么后面所有的都得变。所以我们得传个变量进去。
代码如下:
(function(){
var array = ['Swallows','return'];
var i = 0;
var str = '%s may have gone, but there is a time of %s';
var result = str.replace(/(%s)/g,function(){
return array[i++];
})
console.log(result);
})();
(function(){
var str = '#{what} may have gone, but there is a time of #{how}';
var obj = {
what : 'Swallows',
how : 'return'
}
var result = str.replace(/(?:#{(/w+)})/g,function(all,$1){
return obj[$1];
})
console.log( result);