Javascript 将字符串中的重复字符减少到给定的最小值
我把第一个问题搞乱了:我在寻找比我想出的更优雅的答案。它通过了测试,但很想看到其他解决方案。样本测试包括:Javascript 将字符串中的重复字符减少到给定的最小值,javascript,string,duplicates,character,Javascript,String,Duplicates,Character,我把第一个问题搞乱了:我在寻找比我想出的更优雅的答案。它通过了测试,但很想看到其他解决方案。样本测试包括: reduceString('aaaabbbb', 2) 'aabb' reduceString('xaaabbbb', 2) 'xaabb' reduceString('aaaabbbb', 1) 'ab' reduceString('aaxxxaabbbb', 2) 'aaxxaabb' 以及我的解决方案(通过这些测试): reduceString=函数(str,amo
reduceString('aaaabbbb', 2) 'aabb'
reduceString('xaaabbbb', 2) 'xaabb'
reduceString('aaaabbbb', 1) 'ab'
reduceString('aaxxxaabbbb', 2) 'aaxxaabb'
以及我的解决方案(通过这些测试):
reduceString=函数(str,amount){
var计数=0;
var结果=“”;
对于(变量i=0;i
我尽量把它缩短:
reduceString = function(str, amount) {
var finalString = '', cL = '', counter;
str.split('').forEach(function(i){
if (i !== cL) counter = 0;
counter++;
cL = i;
if (counter <= amount ) finalString = finalString + i;
});
return finalString;
}
reduceString=函数(str,amount){
var finalString='',cL='',计数器;
str.split(“”).forEach(函数(i){
如果(i!==cL)计数器=0;
计数器++;
cL=i;
if(counter只需使用正则表达式
var reduceString = function (str, amount) {
var re = new RegExp("(.)(?=\\1{" + amount + "})","g");
return str.replace(re, "");
}
您可以改为使用reg表达式。在javascript中测试
工作原理:
(.) //match any character
\1 //if it follow by the same character
+{2 //more than 1 times
/g //global
$1 //is 1 time by $1$1 is 2 times
reduceString('aaaabbbb', 2)
reduceString('xaaabbbb', 2)
reduceString('aaaabbbb', 1)
reduceString('aaxxxaabbbb', 2)
function reduceString(txt,num)
{
var canRepeat=['$1'];
for (i=1;i<num;i++)
{
canRepeat.push('$1')
}
canRepeat = canRepeat.join('');
console.log(txt.replace(/(.)\1{2,}/g, canRepeat))
}
(.)//匹配任意字符
\1//如果后面跟同一个字符
+{2//超过1次
/g//全球
$1//是1倍乘以$1$1是2倍
减少开支('aaaabbbb',2)
减少限制('xaaabbb',2)
减少开支('aaaabbbb',1)
减少限制('aaxxxaabbb',2)
函数reduceString(txt,num)
{
var canRepeat=['$1'];
对于(i=1;i和正则表达式:
var reduceString = function(str, amount) {
var x = [ ...new Set(str) ];
for (var c of x){
var rex = new RegExp(c + '{'+amount+',}','g');
str = str.replace(rex,string(c,amount));
}
return str;
};
var string = function(c,amount){
for(var i=0,s="";i<amount;i++)s+=c;
return s;
};
var reduceString=函数(str,amount){
var x=[…新集合(str)];
对于(x的c值){
var rex=newregexp(c+'{'+amount+',}','g');
str=str.replace(rex,string(c,amount));
}
返回str;
};
变量字符串=函数(c,金额){
对于(var i=0,s=”“;i我想我的最佳解决方案是
var str=“axxxaabbcaaxxaab”,
redStr=(s,n)=>s.replace(/(\w)\1+/g,“$1”。重复(n));
console.log(redStr(str,2));
看看@e4en,它甚至更干净。@marcovalent确实如此!我需要把你的答案写下来;)很好!我试图用正则表达式来做,但这很好!想必你想要顺序重复的字符,而不仅仅是重复?@RobG-yup根据样本,看起来这就是他们测试的目的。
var reduceString = function(str, amount) {
var x = [ ...new Set(str) ];
for (var c of x){
var rex = new RegExp(c + '{'+amount+',}','g');
str = str.replace(rex,string(c,amount));
}
return str;
};
var string = function(c,amount){
for(var i=0,s="";i<amount;i++)s+=c;
return s;
};