gpt4 book ai didi

javascript - 找出一个字符在字符串中重复了多少次,并通过动态数字删除那些重复的字符

转载 作者:行者123 更新时间:2023-12-03 20:01:58 28 4
gpt4 key购买 nike

我想编写一个接收两个参数的函数:字符串和数字。
该函数将返回另一个与输入字符串相似但包含某些字符的字符串
删除。
该函数将从相同的连续运行中删除字符
字符,其中运行的长度大于输入参数。
例如:

"aaab", 2 => "aab"

"aabb", 1 => "ab"

"aabbaa", 1 => "aba"
我做了什么:
function doSomething(string,number) {
let repeatCount = 0

debugger;
for (let i = 0; i < string.length; i++) {
if(string[i] == string[i+1]){
repeatCount++
}
if(repeatCount > number ){
string.replace(string[i],'')
}
}

console.log(string)

}
doSomething('aaab',2)
console.log(string)打印 'aaab'但我希望它打印 'aab'因为 number是 2 并且 char 'a' 重复 3 次。
如果有另一种更好的方法,我会很乐意学习。

最佳答案

If there is another better way to do it, I will be happy to learn.


您可以使用 .replace() 方法和带有反向引用的正则表达式来匹配连续的字母。然后你可以使用 .slice() 删除额外的字母以使其达到定义的长度,如下所示:

function shorten(string,number) {
return string.replace(/(.)\1+/g, m => m.slice(0, number))
}

console.log(shorten("aaab", 2))// => "aab"

console.log(shorten("aabb", 1))// => "ab"

console.log(shorten("aabbaa", 1))// => "aba"

上面的正则表达式将匹配任何字符并将其分组 (.) .然后使用 \1+ 再次检查该匹配字符以查看它是否重复了一次或多次。 .替换函数会在每个连续的字母运行中被调用,您可以使用 .slice() 将其 trim 到所需的长度。 .
例如,取字符串 aabbaa .正则表达式尝试查找连续运行的字符。 (.)将匹配任何字符,在这种情况下,它会找到 "a"并将其放入名为“1”的“捕获组”中。现在正则表达式试图通过检查分组(即字符“a”)是否跟随它一次或多次来查找“a”是否跟随一个或多个“a”字符。这是使用 \1+ 完成的。 .第一段 aabbaa这个正则表达式匹配的字符串是“aa”,当我们匹配“a”时,捕获它,发现它与 \1+重复.找到匹配项时,函数 m => m.slice(0, number)运行。此函数采用匹配 ( m),在本例中为 "aa" ,并返回它的切片版本,给出“a”。然后,这会将我们从原始字符串中匹配的“aa”替换为返回的值,从而导致“aa”被转换为“a”(注意这种转换不会修改原始字符串,它发生在新字符串中由 replace 方法返回)。 /g在正则表达式的末尾意味着对整个字符串重复此操作。结果,我们的正则表达式继续前进并找到“bb”。然后再次调用该函数,但这次是 m设为 "bb" ,导致“bb”转换为“b”。最后,我们匹配“aa”,这导致“aa”转换为“a”。一旦替换完成整个字符串,它会返回带有返回值的结果(以及它没有修改的原始字符串部分),因此它给出“aba”

关于javascript - 找出一个字符在字符串中重复了多少次,并通过动态数字删除那些重复的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65791317/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com