js 去除?� 乱码

717 阅读1分钟

js 去除?� 乱码

需求

  • 将这段字符串 "I'm?���driving�??�to�?beijing�?��after�breakfast",格式化为:"I'm driving to Beijing after breakfast"。

思路

  • 将字符串根据�拆分成数组,清除�的影响
  • 过滤空串或者无效的数组元素(这里指'?'字符串)
  • 匹配首位是否是?号,有的话就将第二个字符转成大写
  • 数组拼接为字符串

代码实现

let str = "I'm?���driving�??�to�?beijing�?��after�breakfast"

//截取成数组
strArr = str.split("�");
//strArr ["I'm?", "", "", "driving", "??", "?to", "?beijing", "?", "", "after", "breakfast"]
//过滤??和空字符串
strArr=strArr.filter(item=>{return !/^\?+$/.test(item) && item!==''});
//strArr ["I'm?", "driving", "?to", "?beijing", "after", "breakfast"]

//循环数组并把首字母改成大写并拼接
strArr=strArr.map(item=>{
    // 匹配首位是否是?号
    let reg = /^[?]/g;
    if(reg.test(item)){
        //JavaScript字符串是不可变的,因此不能通过使用运算符来改变字符串
        //slice(start,stop?)
        //表示截取从下标start 到下标stop(不包括该元素)的之间的元素,并返回新数组/新字符串,并不修改原数组/原字符串
        item=item.charAt(1).toUpperCase()+item.slice(2);
    };
    return item;
})
//strArr ["I'm?", "driving", "to", "Beijing", "after", "breakfast"]

//数组转字符串
strArr = strArr.join(" ").split('?').join('')
//I'm driving to Beijing after breakfast"

注意点

  • JavaScript字符串是不可变的,因此不能通过使用运算符来改变字符串
  • 所以在改变字符串的时候,需要用字符串拼接再赋值
let temp='?beijing';
temp.charAt(1).toUpperCase();//返回B
console.log(temp);//还是返回'?beijing'