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

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

  • 相关阅读:
    使用wget -i下载多个文件
    linux安装LNMP的资源
    mysql优化
    npm
    文件上传
    box-shadow
    进程和线程
    String
    JavaScript 目录
    replace
  • 原文地址:https://www.cnblogs.com/coolicer/p/2804532.html
Copyright © 2011-2022 走看看