我有一个字符串,我想删除字母a
的前三次出现(例如)。
似乎正则表达式没有针对特定出现次数的解决方案。我不能使用replace
没有循环,我想避免。
答案 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
使它像这样的功能
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;
答案 2 :(得分:1)
这是一个利用Array#filter
的thisArg
的解决方案。
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)
没有Loop
,String#replace
和regex
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;
答案 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);