replace() 主要用于实现字符串的替换,通常用法如下:
替换第一个匹配内容: str = str.replace(3,"2") 替换全部匹配内容: str = str.replace(/3/g,"2") 去除字符串内所有的空格:str = str.replace(/\s*/g,""); 去除字符串内两头的空格:str = str.replace(/^\s*|\s*$/g,""); 去除字符串内左侧的空格:str = str.replace(/^\s*/,""); 去除字符串内右侧的空格:str = str.replace(/(\s*$)/g,"");
- 第一个参数为匹配规则,用于找出被替换的内容,可以是简单的字符串,也可以是正则表达式
- 第二个参数为替换后内容,可以是简单的字符串,也可以是一个回调函数
当第二个参数是一个回调函数时,便是今天的主角——回调函数式替换,如:
var s = new String('HelloJavaScriptWorld'); function replaceCallback(match){ return "_" + match.toLowerCase(); } s.replace(/[A-Z]/g, replaceCallback); // s 的值为 "_hello_java_script_world"
此时回调函数的参数内容如下:
- 首参数是正则表达式所匹配的内容。
- 尾参数则是被搜索的字符串。
- 尾参数之前的参数表示的是匹配内容所在的位置。
- 剩余的参数可以是由regex模式所分组的所有匹配字符串组。
用数组的描述方式,效果如下:
[ 匹配的内容, 由regex模式所分组的所有匹配字符串组 (可能是多个), 匹配内容在字符串中的下标, 被搜索的字符串 ]
范例:
var glob; var callback = function(){ glob = arguments; return arguments[1] + ' at ' + arguments[2] + ' dot ' +arguments[3]; }; "stoyan@phpied.com".replace(/(.*)@(.*)\.(.*)/, callback); // 结果为 "stoyan at phpied dot com"
此时 glob 的值为:
["stoyan@phpied.com", "stoyan", "phpied", "com", 0, "stoyan@phpied.com"]