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 < 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:替换字符串中的重复字符?的主要内容,如果未能解决你的问题,请参考以下文章