美文网首页
获取字符串中含有某后缀的单词

获取字符串中含有某后缀的单词

作者: Pretty_Boy | 来源:发表于2017-09-20 11:21 被阅读11次

首先先感谢美女耐心的帮我看了一个多小时。。真的很感谢。。
好了 说一下本题的需求:

大致是扩展String,完成getSuffixList方法,使其找出所有包含指定后缀的单词,以及记录单词出现的次数,最终返回按倒序排列次数的单词。
例如:
字符串:“careful beautiful beautiful aful careful beautiful”
后缀:ful
输出结果:"beautiful=3,careful=2,aful=1"

String.prototype.getSuffixList = function(suffix){
    var result = "";
    var reg = new RegExp("^[A-Za-z]+("+suffix+")$");
    console.log(reg); //  正则为 /^[A-Za-z]+(ful)$/
    var arr = this.split(" ");  //将字符串用空格分成数组
    var obj = {}; //创建一个对象存放符合的字符串和对应的次数
  
    //知识点1:reg.exec()有一个细节,大概磨蹭了快一个小时,就因为在数组内使用了/g的正则
    //reg.exec()在没有/g的情况下匹配当前单词
    //reg.exec()在有/g的情况下在字符串内匹配所有单词
    for(var i=0;i<arr.length;i++){ //循环遍历数组
        let str;
        if (reg.exec(arr[i])) {
          str = reg.exec(arr[i])[0];
        } else {
          console.log('-----', arr[i])
        }
        console.log(str); // 所匹配到的单词
        if (!obj[str]) { 
          obj[str] = 1;
        } else {  // 原本有该单词则次数+1
          obj[str]++;
        }
    }
  
  console.log(obj); //输出所有匹配的单词及次数
 //[object Object] {
 //   aful: 1,
 //   beautiful: 3,
 //  careful: 2
 // }

 //知识点2:根据对象中的属性进行排序
  var c = Object.keys(obj).sort(function(a,b){
    return obj[b]-obj[a];
  }); //逆序后 返回为数组 ["beautiful", "careful", "aful"]

  var array = []; //存放结果数组
  if ( c.indexOf('undefined') >= 0) {
    c.splice(c.indexOf('undefined'),1);
  }
  for(var i = 0; i < c.length; i++){
      for(var key in obj){
        if(c[i] == key){
          array.push(key+"="+obj[key]);
          break;
        }
      }
  }
  return array.join(",");//将结果数组转成字符串用,分割
};
console.log("careful beautiful beautiful aful careful beautiful".getSuffixList('ful'));

相关文章

网友评论

      本文标题:获取字符串中含有某后缀的单词

      本文链接:https://www.haomeiwen.com/subject/tiggsxtx.html