Javascript 如何删除字符串中额外出现的字母?

Javascript 如何删除字符串中额外出现的字母?,javascript,Javascript,使用Javascript有没有办法删除字符串中特定字母的额外出现 例如: remove_extra('a','caaaat') //=>“猫” 我知道一定有一种蛮力的方式来做这样的事情,但有一种优雅的方式吗?我不知道如何处理这个算法。您可以使用regex执行此操作: var test = "aaabbbccc"; console.log(test.replace(/(.)(?=.*\1)/g, "")); //would print abc var test2 = "caaaaat"; con

使用Javascript有没有办法删除字符串中特定字母的额外出现

例如:

remove_extra('a','caaaat')
//=>“猫”

我知道一定有一种蛮力的方式来做这样的事情,但有一种优雅的方式吗?我不知道如何处理这个算法。

您可以使用regex执行此操作:

var test = "aaabbbccc";
console.log(test.replace(/(.)(?=.*\1)/g, "")); //would print abc
var test2 = "caaaaat";
console.log(test2.replace(/(.)(?=.*\1)/g, "")); //would print cat

对不起,我误解了你的问题

要仅保留指定字符的一个实例,请执行以下操作:

函数onlyOneCharOf(字符串、模式){
让第一个=真;
//如果(pattern.length!==1)抛出错误(“应为一个字符”);
pattern=pattern.replace(//[.*+?^${}()\[\]\\]/g,\\$&');//转义正则表达式特殊字符
返回字符串.replace(新的RegExp(模式,“g”),值=>{
如果(第一){
第一个=假;
返回值;
}
返回“”;
});
}

console.log(仅限于Echarof(“zzzzz aaabbbccc”,“a”)您可以使用
数组。从
分解字符串:

Array.from('caaaat');
//=>[“c”、“a”、“a”、“a”、“a”、“t”]
然后可以使用
Array#filter
保留既不是“a”也不是第一次出现的“a”的所有内容:

Array.from('caaaat').filter((x,i,xs)=>x!='a'| | xs.indexOf(x)==i)。连接(“”);
//=>“猫”
(我把它留给您作为一个练习,将其放入一个可重用的函数中。)


请注意,如果您选择将
char
解释为正则表达式而不首先验证它,则可能会出现意外结果:

函数onlyOneCharOf(字符串,字符){
让第一个=真;
返回字符串.replace(新的RegExp(char,“g”),值=>{
如果(第一){
第一个=假;
返回值;
}
返回“”;
});
}
仅限ECHAROF(‘caaat’,’);
//=>“c”
仅限ECHAROF('caaat','?');
//=>合成错误

只有
'a'
或任何额外副本?@Nina Scholz第一个'a'可以保留,但所有额外的'a'都被删除。它可以是任何一个字母,我只是用“a”作为例子。你试过什么吗?什么不起作用?@NinaScholz不,我已经考虑过了,撞到了一个街区。使用正则表达式很容易删除特定类型的每个字母。不幸的是,除了使用暴力,我看不到一个聪明的方法来删除第一个字母之后的每个字母。这太棒了!我不认为用纯正则表达式就可以做到这一点。但是,如果我需要这一点来适用于像“a”这样的单个字母,而不是所有字母,该怎么办?顺便说一句,我不知道为什么这个问题会让人大吃一惊。集合很好,但它们有一个类似于正则表达式方法的问题。集合只包含给定值一次。但是如果每个值都可以重复,但不能重复1呢。例如,无限制的“b”、“c”、“d”,但只有1个“a”。我想知道解决这个问题的唯一方法是否是使用if/then的简单循环。再一次,我不知道为什么这个问题会被拒绝。@myNewAccount抱歉,误解了你的意思。请参阅更新的答案。
.replace()
Regex
组合使用。我在想
.map
.reduce
等等,还有一些其他的方法来解决这个问题。您的方式很完美。@myNewAccount请参阅更新的特殊字符答案。