Javascript:替换字符串中的重复字符?

Posted

技术标签:

【中文标题】Javascript:替换字符串中的重复字符?【英文标题】:Javascript: Replace repeated character in a string? 【发布时间】:2020-12-19 16:29:47 【问题描述】:

我一直在解决代码战中的 katas,但偶然发现了一个我似乎无法找到答案的一般代码问题。

这是我的代码:

function wave(str) 
   let arr = [];
   for (var i = 0; i < str.length; i++) 
       str[i].match(/\S/) && arr.push(str.replace(str[i], str[i].toUpperCase()));
   
   return arr;
 ;

(注意:输入总是小写。) 在wave("abc def"); 的情况下,代码完全符合我的要求:

["Abc def", "aBc def", "abC def", "abc Def", "abc dEf", "abc deF"]

=> 函数接受一个字符串,将字符串中从str[0]开始的一个字母大写,将新单词推入arr,递增i并重复过程直到i &lt; str.length,然后返回arr结果。

但是,例如,如果我输入 wave("acc def");,则只有第一次出现的字母 c 会返回大写:

["Acc def", "aCc def", "aCc def", "acc Def", "acc dEf", "acc deF"]

问题:为什么它会“跳转”第二次出现的“c”以及如何定位字符串中第二次或第 n 次出现的字符?

【问题讨论】:

"只有第一次出现" ~ 尝试全局匹配/\S/g ? str.replace(str[i], ...) 只会替换str[i] 处字符的第一次出现(因此它也不适用于cac def str[i] (.slice()) 的左边部分,取str[i] 的大写版本,取str[i] (.slice()) 的右边部分——再次组合它们跨度> 【参考方案1】:

str.replace("x", "y")str 中第一次出现的"x" 替换为"y" 如果字符串中只有唯一字符,则您的方法有效,但是当有重复字符时,它将失败,例如"acc def"

你可以将.slice()字符串分成三部分:

i 左边的部分 -> .slice(0, i) 索引处的字符i -> str[i] 索引后的剩余部分i -> .slice(i + 1)

根据需要修改str[i],并将它们与.join("")组合回一个字符串

function wave(str) 
  const result = [];
  
  for (let i = 0; i < str.length; i++) 
    if (!str[i].match(/\S/)) continue;
    
    result.push([
                  str.slice(0, i),      /* the part left of str[i] */
                  str[i].toUpperCase(), /* str[i] */
                  str.slice(i + 1)      /* the remaining part right of str[i] */
                ].join(""))  // combine the parts in the array into a string
  
  
  return result;
 ;
 
 
 console.log(JSON.stringify(wave("abc def")));
 console.log(JSON.stringify(wave("acc def")));

【讨论】:

【参考方案2】:

当您说str.replace(str[i], str[i].toUpperCase()) 时,您是在说:“将第一次出现的str[i] 替换为str[i].toUpperCase()”,这正是您的程序正在做的事情。

考虑像这样构建你的新字符串:

str.substring(0, i) + str[i].toUpperCase() + str.substring(i+1)

【讨论】:

以上是关于Javascript:替换字符串中的重复字符?的主要内容,如果未能解决你的问题,请参考以下文章

字符串替换javascript [重复]

渲染JSON而不替换Jinja中的字符[重复]

用 JavaScript 字符串中的单个空格替换多个空格

如何在Javascript中更改字符串中的特定字符[重复]

如何用 sed 替换缩小的 javascript 文件中的多个值 [重复]

javascript 替换指定位置的字符