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

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

  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/coolicer/p/2804532.html
Copyright © 2011-2022 走看看