在字符串中查找多个出现的字符

时间:2016-03-14 10:00:14

标签: javascript regex replace

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

似乎正则表达式没有针对特定出现次数的解决方案。我不能使用replace没有循环,我想避免。

6 个答案:

答案 0 :(得分:3)

很好的挑战。

这有效:

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更改为!;你也可以安全地替换它。

这可以扩展到任何数字,因为您可以将{3}更改为所需的更改次数。

答案 1 :(得分:2)

  

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

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

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

使它像这样的功能

&#13;
&#13;
    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);
    
    
&#13;
&#13;
&#13;

答案 2 :(得分:1)

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

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

document.write(string);

答案 3 :(得分:1)

使用替换回调计算匹配项:

function replaceFirstN(str, regex, n, replacement) {
  var i = 0;
  return str.replace(regex, function(match) {
    return i++ < n ? replacement : match;
  });
}

output.innerText = replaceFirstN("a a a a a a a a", /a/g, 3, "b");
<pre id="output"></pre>

答案 4 :(得分:0)

没有LoopString#replaceregex

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 5 :(得分:0)

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