• replace的应用


    1.将数字字符串变成大写的汉字,eg:"123" => "壹贰叁"

    function numToChar(str) {
        var ary = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
        var newStr = str.replace(/d/g, function() {
          var index = arguments[0];
          return ary[index];
        })
        return newStr;
    }
    console.log(numToChar("20160209")) 
    // 贰零壹陆零贰零玖

    2.模板引擎的初步原理,eg:"my name is {0},my age is {1},i come from {2},i love {3}~~",然后将数组对应项一一放进去["一问", 28, "湖南", "js"],然后得到完整的句子

    var str = "my name is {0},my age is {1},i come from {2},i love {3}~~";
      var arr = ["huahua", 28, "beijing", "js"];
      var newStr = str.replace(/{(d)}/g,function  () {
          var index = arguments[1];
          return arr[index];
      })
      console.log(newStr); 
    // my name is huahua,my age is 28,i come from beijing,i love js~~

    3.获取一个字符串中出现最多次数的字母,并且获取出现的次数

     思路:先找到出现的所有字母及其出现的次数,然后找到出现次数的最大值,最后看最大值对应哪些字母

      var str = "huahuaveryxihuanbaozihei";
      var obj = {};
      // 找出现的字母及其出现字数,键值对
      str.replace(/[a-zA-Z]/g, function() {
        var cur = arguments[0];
        if (!(cur in obj)) {
          obj[cur] = 1;
        } else {
          obj[cur]++;
        }
      })
      console.log(obj)
      // 出现次数的最大值
      var max = 0;
      for (var key in obj) {
        if (obj[key] > max) {
          max = obj[key];
        }
      }
      // 最大值对应的字母
      var arr = [];
      for (var key in obj) {
        if (obj[key] === max) {
          arr[arr.length] = key;
        }
      }
    
      arr.zmax = max;
     console.log(obj);
    // {h: 4, u: 3, a: 4, v: 1, e: 2…} console.log(arr);
    // ["h", "a", zmax: 4]

    突发奇想的想用一次循环,可以跳过,每次匹配的时候,

    1) 判断键是否在对象中,若不在创建键值,反之值加1

    2) 看对应的键值有没有大于max,若大于的话则更新max值,重置数组,数组的第一项为此键,若等于的话则向数组中添加键

      var str = "huahuaveryxihuanbaozihei";
      var obj = {};
      var max = 0,
        arr = [];
      str.replace(/[a-zA-Z]/g, function() {
        var cur = arguments[0];
        if (!(cur in obj)) {
          obj[cur] = 0;
        }
        obj[cur]++;
        if (obj[cur] > max) {
          max = obj[cur];
          arr = [cur];
        } else {
          if (obj[cur] === max) {
            arr[arr.length] = cur;
          }
        }
    
      })
      arr.zmax = max;
     console.log(obj);
    // {h: 4, u: 3, a: 4, v: 1, e: 2…} console.log(arr);
    // ["h", "a", zmax: 4]
    
    

    4.根据url得到参数值,eg:http://kbs.sports.qq.com/kbsweb/game.html?mid=100000&cid=1467086&app=1.0 => {mid:100000,cid:1467086,app=1.0}

     匹配规则:等号前面非?&=的值,后面非?&=的值

    var str = "http://kbs.sports.qq.com/kbsweb/game.html?mid=100000&cid=1467086&app=1.0";
      var reg = /([^?=&]+)=([^?=&]+)/g;
      var obj = {};
      str.replace(reg,function () {
          console.log(arguments);
          obj[arguments[1]] = arguments[2];
      })
      console.log(obj); // {mid: "100000", cid: "1467086", app: "1.0"}

    5.日期格式的转换,eg: "2015-9-22 13:10:0" -> 2015年09月22日 13时10分00秒

      // 引用模板思路,先上一个模板,然后将模板中对应的位置替换掉就可以了
      // 而对于"2015-9-22 13:10:0",需要提取出年月日时分秒,用正则捕获即可,得到的是数组
      // {0}=>2015,而2015存在捕获的数组里,将其索引和0建立关系即可
      // [{0},{1}...]和[2015,9]一一对应即可,相当于遍历前面的数组将值一一换成后面数组的值
      var model = "{0}年{1}月{2}日 {3}时{4}分{5}秒";
      var timeStr = "2015-9-22 13:10:0";
      var arr = /(d{4})[-/](d{1,2})[-/](d{1,2}) (d{1,2}):(d{1,2}):(d{1,2})/.exec(timeStr);
      // ["2015-9-22 13:10:0", "2015", "9", "22", "13", "10", "0", index: 0, input: "2015-9-22 13:10:0"]
      console.log (arr);
      // 将 "1"=>"01",一位数字通过加零变成两位数字
      function oneBitFormatTwoBit(str) {
        return str.length === 1 ? "0" + str : str;
      }
      var newStr = model.replace(/{(d+)}/g, function() {  
        console.log(arguments)
        // 拿第一次遍历举例,,arguments是["{0}", "0", 0, "{0}年{1}月{2}日 {3}时{4}分{5}秒"]
        // 返回的值肯定是2015,而2015是arr[1],arguments[1]的值是"0",换言之,2015就是arr[+arguments[1] + 1],"0"是字符串需要转换成数字
        // 结果的长度若是一位需要转换成两位
        return oneBitFormatTwoBit(arr[+arguments[1] + 1])
    
      })
      console.log(newStr);
      // 2015年09月22日 13时10分00秒


    6.把一个字符串所有单词的首字母大写

      // 其实就是将单词首字母从小写替换成大写
      var str = "huahua loves eating bums";
      var newStr = str.replace(/(?:^|s)([a-z])/g,function () {
          return arguments[0].toUpperCase();
      })
  • 相关阅读:
    简单 android popupwindow 实现
    Android json 数据解析
    java 重载父类报错 Remove '@override' annotation解决办法
    Android数据的四种存储方式
    Java将Unix时间戳转换成指定格式日期
    Android中MenuInflater实例
    技术转载:Jni学习四:如何编写jni方法
    android NDk环境编译总结
    Android JNI学习之javah命令的正确使用(找了好半天才找到的,汉,网上好多说法都没用)
    android项目中如何加载已有so库 <转>
  • 原文地址:https://www.cnblogs.com/2han/p/6374204.html
Copyright © 2020-2023  润新知