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

时间:2018-10-02 11:52:13

标签: javascript string replace

给出一个类似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");

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

enter image description here

我还尝试了string.replace()方法-结合for循环:

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");

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

能不能给我一个提示,指出出了什么问题以及如何获得理想的结果?

4 个答案:

答案 0 :(得分:1)

最简单的方法是使用split将文本分割成单个字符,然后通过简单地再次将a => bb => ajoin替换在一起来映射字符数组,或者使用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'));

答案 1 :(得分:1)

<template>
    <div class="media">
         <p>{{ log.name  }}</p>
    </div>
</template>
<script>
    export default {
        props: ['log']
    }
</script>

答案 2 :(得分:0)

您的第一个示例可以工作,但是将字符串替换为字符数组(与字符串不同)。您可以简单地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。这基本上只是将所有a切换为b,而b切换回a。导致输出字符串与输入字符串相同。

答案 3 :(得分:0)

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

此外,将newa数组声明移到swit函数中也很有意义。

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

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");