如何在JavaScript中反转字符串字母并保留非字母位置?
JavaScript实现字符串重排方案
可以通过以下两步完成需求:
- 提取并反转字母序列:从原字符串中筛选出所有字母字符,将这个字母数组反转,得到逆序的字母列表。
- 重构目标字符串:遍历原字符串的每个字符,遇到非字母字符直接保留;遇到字母字符时,从反转后的字母列表中依次取出元素填充。
代码实现
function reverseLettersKeepSymbols(str) { // 提取所有字母并反转,无字母时返回空数组 const reversedLetters = str.match(/[a-zA-Z]/g)?.reverse() || []; // 遍历原字符串,逐个处理字符 return str.split('').map(char => { // 是字母则取反转后的第一个元素,否则保留原字符 return /[a-zA-Z]/.test(char) ? reversedLetters.shift() : char; }).join(''); } // 测试示例 const input = "t-hE-rEd=fiSh!!"; const output = reverseLettersKeepSymbols(input); console.log(output); // 输出: "h-Si-fdE=rEht!!"
代码说明
str.match(/[a-zA-Z]/g):用正则匹配所有大小写字母,返回字母数组;若字符串无字母,?.运算符避免报错,返回空数组。reverse():将字母数组逆序,得到需要填充的字母顺序。split(''):把原字符串拆分为单个字符的数组,方便遍历处理。map():遍历每个字符,判断是否为字母:是则从reversedLetters头部取出元素(shift()),否则保留原字符。join(''):将处理后的字符数组拼接成最终字符串。
内容的提问来源于stack exchange,提问作者Santhosh Kumar
相关产品推荐
相关产品推荐

