繁体   English   中英

如何在JavaScript中替换字符串中的特定字符?

[英]How to replace specific characters within a string in JavaScript?

给定像aaabba这样的字符串,我想要一个函数,将a转换b ,将b转换a ,返回bbbaab

我尝试了这个笨拙的方法:

var newa = [];
function swit(x) { 
    for (var i = 0; i < x.length; i++) {
        if (x[i] === 'a') {
            newa.push('b');
        } 
        else if (x[i] === 'b') {
            newa.push('a');
        } 
        alert(newa);
    }
}
swit("aaab");

单击大量警报后,最后一个警报将显示预期结果。 但我希望它首先没有逗号–多次迭代之后:

在此处输入图片说明

我还尝试了string.replace()方法–与for -loop结合使用:

function swit(x) { 
    for (var i = 0; i < x.length; i++) {
        if (x[i] === 'a') {
            x.replace('a', 'b');
        } 
        else if (x[i] === 'b') {
            x.replace('b', 'a');
        } 
        alert(x);
    }
}
swit("aaab");

但是什么都没有改变。 为什么?

您能否给我一些提示,指出出了什么问题以及如何获得期望的结果?

最简单的方法是使用split将文本分割为单个字符,然后通过简单地替换a => bb => a并将字符映射到字符数组,然后再次join其连接在一起,或者仅使用replace

'bbbaab'.split('').map(char => char === 'a' ? 'b' : 'a').join('');

'bbbaab'.replace(/a|b/g, (match) => match === 'a' ? 'b' : 'a');

 function swap(str) { return str.split('').map(char => char === 'a' ? 'b' : 'a').join(''); } function swap2(str) { return str.replace(/a|b/g, (match) => match === 'a' ? 'b' : 'a'); } console.log(swap('bbbaab')); console.log(swap2('bbbaab')); 

var str = "aaab";
str = str.replace(/a|b/g, v => {
       if(v=="a"){
         return "b"
       }else{
         return "a"
       }
    });

console.log(str);

您的第一个示例有效,但是用一个字符数组(不同于字符串)替换了字符串。 您可以简单地join结果数组以获得所需的结果:

function swit(x) {
    var newa = [];

    for (var i = 0; i < x.length; i++) {
        if (x[i] === 'a') {
            newa.push('b');
        } else if (x[i] === 'b') {
            newa.push('a');
        }
    }

    var arrayJoined = newa.join('');
    alert(arrayJoined);
    return arrayJoined;
}

对于第二个示例, replace替换字符串中所有出现的内容,并且不需要在for循环中运行。 因此,您在第二个代码示例中实际执行的操作是: for each character in string: if character is 'a', replace by b. if character is 'b', replace by a for each character in string: if character is 'a', replace by b. if character is 'b', replace by a 基本上,这只是将所有a切换为b ,而b切换回a 这将导致输出字符串与输入字符串相同。

您需要将警报行从for循环中移到末尾,并使用Array.join()newa转换为不带逗号的字符串。

此外,它将使意义移动newa内部数组声明swit功能。

最后,您还应该考虑添加else条件,如果不是ab ,则只需将完全相同的当前字符推入newa数组,因此输出字符串的长度与原始字符串相同。

 function swit(x) { var newa = []; for (var i = 0; i < x.length; i++) { if (x[i] === 'a') { newa.push('b'); } else if (x[i] === 'b') { newa.push('a'); } else { newa.push(x[i]) } } alert(newa.join("")); } swit("aaab"); swit("aasdfcvbab"); 

暂无
暂无

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

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