replace小结
replace是一个很好用的方法,但是我却一直害怕用它。原因是它里面有涉及到正则,今天来看看能突破到哪一个地步。
首先,来看看它的语法:newstring = str.replace(regexp|substr, newSubStr|function[, Non-standard flags]);
来一个比较简单的例子先,
var str = "He said,Hello world."; var newString = str.replace(/He/g,'he'); // ==> he said, hello world.
这个最简单的用法,没有用到正则,没有函数。只是简单地使用了完全匹配。再来看看微软这个例子:
var s = "The quick brown fox jumped over the lazy dog."; var re = /(\S+)(\s+)(\S+)/g; // Exchange each pair of words. var result = s.replace(re, "$3$2$1"); document.write(result); // Output: quick The fox brown over jumped lazy the dog.
这个用了正则,我们不要害怕,来看看正则是什么:
(\S+)(\s+)(\S+) \S代表的是非空字符,\s代表空字符,+是元字符表示一个或者一个以上。()则表示分组,所以这里的正则表示,匹配两个单词,交换它们位置。$n表示捕获到的字符串,n从1-9自动填充。再来看看另外一个传入函数的例子:
function replacer(match, p1, p2, p3, offset, string){ // p1 is nondigits, p2 digits, and p3 non-alphanumerics return [p1, p2, p3].join(' - '); }; newString = "abc12345#$*%".replace(/([^\d]*)(\d*)([^\w]*)/, replacer); // "abc - 12345 - #$*%": // \d为数字,([^\d]*)则表示以不是数字开头的,(\d*) 表示数字,*为是量词,表示0个或多个,([^\w]*),\w是单词字符,^是非的意思,所以这里是非单词的意思。
replacer里面的6个参数涵盖了这个方法所可能返回的值。
最后来总结一下,当replace要发挥最大功能时,还是要使用正则的,当传入的是字符串作为参数,如:
/(\S+)(\s+)(\S+)/ $1,$2,$3分别对应 (\S+),(\s+),(\S+)
当传入的是函数时,如上面的例子,则是p1,p2,p3,分别对应了([^\d]*),(\d*),([^\w]*)。像正则所匹配的内容都要清楚,只是匹配单个,要多个的必须加上量词,像+,*,?等。
稍后,我想重新在我的个人博客里再写一篇更有分量的。