
贴一下代码
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方法反转
- 将之前记录的不是英文字母的符号按照他们原来的位置插入反转后的数组
- 遍历数组,将每一项拼接得到结果