zoukankan      html  css  js  c++  java
  • Search and Replace

    使用给定的参数对句子执行一次查找和替换,然后返回新句子。

    第一个参数是将要对其执行查找和替换的句子。

    第二个参数是将被替换掉的单词(替换前的单词)。

    第三个参数用于替换第二个参数(替换后的单词)。

    注意:替换时保持原单词的大小写。例如,如果你想用单词 "dog" 替换单词 "Book" ,你应该替换成 "Dog"。

     

    //判断字符串str中首字符是否大写
    function isFirstUpper(str){
      if(str.charAt(0)==str.charAt(0).toUpperCase())
        return true;
      else
        return false;
    }
    //将字符串str中首字符替换成大写形式
    function firstToUpper(str){
      return str.replace(str.charAt(0),str.charAt(0).toUpperCase());
    }
    function myReplace(str, before, after) {  
      //如果即将被替换的单词before中首字符为大写形式
      //则将替换before的单词after首字符替换成大写形式
      if(isFirstUpper(before)){
        after=firstToUpper(after);
      }
      //将str中目标单词before用after替换
      str=str.replace(before,after);
      return str;
    }
    
    myReplace("A quick brown fox Jumped over the lazy dog", "Jumped", "leaped");

    提示

    Array.splice()

    String.replace()

    Array.join()

    思路

    这题很明显要使用字符串的 replace() 方法。

    String.prototype.replace() 语法:

    str.replace(regexp|substr, newSubStr|function)

    余下的问题在于如何替换时保持原单词的大小写。这个指的应当是单词的首字母。

    解法一

    索引方式访问字符串。JavaScript中可以用索引方式访问单个字符,就像访问数组中的某一项一样。

    if(before[0] === before[0].toUpperCase()){
        //do something...
      }

    解法二

    用正则表达式匹配;用 charAt() 访问单个字符。

    使用正则表达式的好处在于,即使未来替换规则改变,代码修改量也不会很大。

    var re = /^[A-Z]/;
    if(re.test(before.charAt(0))){
        //do something...
      }

    这里顺便说一下访问单个字符时, str[index] 和 charAt(index) 的区别:

    对于 超出范围的索引值 , str[index] 将返回 undefined ,而 charAt(index) 将返回一个空字符串。

    对于 IE8以下版本 , str[index] 不被兼容,将返回 undefined。

    解法
    
    解法一
    
    function myReplace(str, before, after) {
      if(before[0] === before[0].toUpperCase()){
        after = after[0].toUpperCase() + after.slice(1);
      }
      str = str.replace(before,after);  
      return str;
    }
    解法二
    
    function myReplace(str, before, after) {
      var re = /^[A-Z]/;
      if(re.test(before.charAt(0))){
        after = after.charAt(0).toUpperCase() + after.slice(1);
      }
      str = str.replace(before,after);
      return str;
    }
  • 相关阅读:
    List of 3rd Party .NET UI & Reporting Components
    cannot open window service on computer '.' in window application
    CentOS7重新生成 /boot/grub2/grub.cfg
    vmware esxi 查看网卡、Raid卡驱动
    libcmt.lib和msvcrt.lib冲突,原因和解决方法
    C/C++注释规范
    lsof命令查看端口关联的文件
    linux下查看磁盘分区的文件系统格式
    编译linux kernel及制作initrd ( by quqi99 )
    三种虚拟化技术比较
  • 原文地址:https://www.cnblogs.com/fffangrui/p/6112569.html
Copyright © 2011-2022 走看看