现在的位置: 首页 > 综合 > 正文

replace小结

2013年07月18日 ⁄ 综合 ⁄ 共 1179字 ⁄ 字号 评论关闭

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]*)。像正则所匹配的内容都要清楚,只是匹配单个,要多个的必须加上量词,像+,*,?等。

稍后,我想重新在我的个人博客里再写一篇更有分量的。

抱歉!评论已关闭.