繁体   English   中英

查找字符串中出现的许多字符

[英]Find a number of occurrences of character in string

我有一个字符串,我想删除字母a的前3次出现(例如)。

似乎正则表达式无法解决特定数量的事件。 而且我不能使用无循环replace ,我想避免这种情况。

很好的挑战。

这有效:

 var str = "I have a string and I want to remove the first 3 occurrences of the letter a (for example)."; str = str.replace(/^([^a]*a){3}/, function(match) { return match.replace(/a/g, '!'); }); document.body.innerHTML = str; 

结果:

I h!ve ! string !nd I want to remove the first 3 occurrences of the letter a (for example).

第一次replace匹配一个连续字符串,该字符串恰好包含3 a s。 其内部替换将a更改为a ! 为了清楚; 您也可以放心地替换它。

这可以缩放为任意数量,因为您可以将{3}更改为所需的更改数量。

我有一个字符串,我想删除字母a的前3次出现(例如)。

如果正则表达式不是强制性的并且循环不是一个大问题,那么请尝试此单行循环

str = str.split(/(?=a)/).map(function(value,index){ if (index < 3){value=value.replace("a", "")} return value }).join(""); // 3 and "a" can be passed on as input

使它像这样

  function removeNOccurences(str, toBeRepalced, n) { return str.split(/(?=a)/).map(function(value,index){ if (index < n){value=value.replace(toBeRepalced, "")} return value }).join(""); } document.body.innerHTML += removeNOccurences("asdas3sdfw3aar23rzas", "a", 3); 

这是一个利用Array#filterthisArg的解决方案。

 var string = 'a1a2a3a4a5a6a7a8a9a'.split('').filter(function (a) { return a !== 'a' || ++this.c > 3; }, { c: 0 }).join(''); document.write(string); 

使用replace回调计算匹配项:

 function replaceFirstN(str, regex, n, replacement) { var i = 0; return str.replace(regex, function(match) { return i++ < n ? replacement : match; }); } output.innerText = replaceFirstN("aaaaaaaa", /a/g, 3, "b"); 
 <pre id="output"></pre> 

没有LoopString#replaceregex

 var str = "abcabcabcabc"; function replace(s, symbol, replacer, times) { if (times == 0) return s; var i = s.indexOf(symbol); var a = s.split(''); a[i] = replacer; return replace(a.join(''), symbol, replacer, --times) } var result = replace(str, 'a', '_', 3); document.write(result); 

var str = "What a beautiful day is today";
var strA = str.split('a',4).join('a');
var strRemaining = str.replace(strA,'');

// Do global replace and append remaining string
var resultStr = strA.replace(/a/g,'') + strRemaining; 
alert(resultStr);

JSFiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM