仅仅反转字母

126 阅读1分钟

仅仅反转字母

image.png

贴一下代码

function reverseOnlyLetters(s: string): string {
    const reg = RegExp(/^[a-z]+$/i);
    let result = '';
    let sArray = s.split('');
    let chatArr = [];
    let copyArray = JSON.parse(JSON.stringify(sArray));
    sArray.reverse();
    // 找出不是英文字母的项
    copyArray.map((item: string, index: number) => {
        if(!reg.test(item)){
            chatArr.push([item, index])
        }
    })
    // 删除非英文字母
    for(let i =0; i < sArray.length; i++){
        if(!reg.test(sArray[i])){
            sArray.splice(i, 1)
            i--
        }
    }
    chatArr.map((item) => {
        sArray.splice(item[1], 0, item[0])
    })
    sArray.map(item => {
        result = result + item
    })
    return result
};

思路:

  • 首先用正则匹配出所有不是英文字母的项,并且记录他们的位置
  • 然后把原数组不是英文字母的删掉,用数组的reverse方法反转
  • 将之前记录的不是英文字母的符号按照他们原来的位置插入反转后的数组
  • 遍历数组,将每一项拼接得到结果