omiga

简单就好

replace (searchValue, replaceValue)

3条评论»

字符串对象的replace方法作查找替换操作非常好用。

语 法
stringObject.replace(regexp,replacement)

regexp – 必需。规定了要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。

replacement – 必需。一个字符串值。规定了替换文本或生成替换文本的函数。

简单使用:

var s = 'he is a god girl!';
var pattern = /he/g;
alert(s.replace(pattern,"she"));

稍微复杂一点的使用:(回溯引用)

var s = 'i like GFW';
var pattern = /(GFW)/g;
alert(s.replace(pattern,"the great $1"));

当传入的替换文本参数为字符串时它还接受第三个参数

var str = "Apples are round, and apples are juicy.";
alert(str.replace("apples", "oranges", "gi"));

其实,这些都不是我想说的,我想说replacement为函数的情况。

ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数 是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。

根据以上说明,replace()可以通过为替换函数传入参数完成一些更为复杂的功能。

如将所有单词首字母转换成大写:

var s = "the great gFW";
var pattern = /\b\w+\b/g;
alert(s.replace(pattern,function(w){return w.substring(0,1).toUpperCase()+w.substring(1)}))

多传几个参数试试:

var s = "AAAbbbZZZ AAAcccZZZ AAAdddZZZ AAAeeeZZZ hijklmnopqrstuvwxy";
var pattern = /\b(AAA)(\w+)(ZZZ)\b/g;
alert(s.replace(pattern,function(w,w1,w2,w3,i){return i+w1+w2+w3+i}));

就这样了?可以继续传入参数吗?再试:

var s = "AAAbbbZZZ AAAcccZZZ AAAdddZZZ AAAeeeZZZ hijklmnopqrstuvwxy";
var pattern = /\b(AAA)(\w+)(ZZZ)\b/g;
s.replace(pattern,function(w,w1,w2,w3,i,x){alert(x)});

居然还有~···不过这个值从何而来我也迷惑了~···还可以传参数吗?再试!的确不可以了。

函数中第一个参数是匹配模式的字符串,接下来的参数是匹配模式中子表达式的字符串,数量与子表达式个数一致。当所有模式匹配参数都传递完后,后一个参数为匹配在字符串中出现的位置。根据这个特性可以发散出很多高级的应用。