You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS字符串处理问题:首尾为'a'的单词替换及顺序问题求解

优化首尾为'a'的单词中间字符替换方案

需求说明

给定一个字符串,将每个首尾均为'a'的单词中,首字母与尾字母之间的所有字符替换为'!'。
示例:

aza asssa axxxa rrra -> a!a a!!!a a!!!a rrra

原有方案的问题

现有代码将符合替换条件和不符合条件的单词分别存入new__words和words__static两个数组,当输入字符串中两种单词交替出现时(如aza asssa rrra axxxa),合并数组会打乱原有单词顺序,无法得到正确结果。此外原有代码逻辑冗余,比如通过递归获取空格索引的方式过于复杂,且存在未生效的代码(new__words.map(i => "a" + i + "a")未保存处理结果)。

优化解决方案

可以通过分割-映射-拼接的极简流程实现,既能保证单词顺序不变,又大幅简化代码逻辑:

const inputStr = "aza asssa rrra axxxa";

// 按空格拆分单词,逐个处理后重新拼接
const result = inputStr.split(' ').map(word => {
  // 过滤掉单个'a'的情况,仅处理首尾为'a'且长度≥2的单词
  if (word.length >= 2 && word[0] === 'a' && word.at(-1) === 'a') {
    // 保留首尾'a',中间生成对应数量的'!'
    return 'a' + '!'.repeat(word.length - 2) + 'a';
  }
  // 不符合条件的单词直接返回
  return word;
}).join(' ');

console.log(result); // 输出:a!a a!!!a rrra a!!!a

代码逻辑说明

  • split(' '):将输入字符串按空格拆分为单词数组,严格保留原有单词顺序
  • map():遍历每个单词做针对性处理:
    • 先判断单词长度≥2(避免单个'a'被误处理),且首尾字符均为'a'
    • 用'!'.repeat(word.length - 2)生成与中间字符数量一致的感叹号,拼接首尾的'a'
  • join(' '):将处理后的单词数组重新拼接为字符串,保持原有空格分隔格式

内容的提问来源于stack exchange,提问作者Aintripin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:20:30