在JavaScript/jQuery中替换优雅的多个char

Yuv*_*dam 4 javascript regex jquery

我有一个JS字符串需要替换它的几个字符.

例如,对于输入字符串:

s = 'ABAC'
Run Code Online (Sandbox Code Playgroud)

我想BCs 替换所有s,反之亦然.但是,执行标准正则表达式替换是不够好的,因为replace()s不应该以锁步方式发生,而是在字符串上单次传递.

>>> s.replace(/B/g, 'C').replace(/C/g, 'B')
'ABAB' // not good
Run Code Online (Sandbox Code Playgroud)

是否有一种优雅的方式replace()在一次传递中做多个字符串?

(解决方案必须适用于任意替换char)

fca*_*ran 9

var str = 'ABACACCBA',
    out = str.replace(/[CB]/g, function(c) {
        return {
            "B" : "C",
            "C" : "B"
        }[c];
    });

console.log(out);  /* ACABABBCA */
Run Code Online (Sandbox Code Playgroud)

您所要做的就是定义要匹配的所有字符,然后定义具有交换规则的对象.也可以用这种方式进行替代

var str = 'ABACACCBA',
    out = str.replace(/\w/g, function(c) {
        return {
            "B" : "C",
            "C" : "B"
        }[c] || c;
    });

console.log(out);  /* ACABABBCA */
Run Code Online (Sandbox Code Playgroud)

在此示例中,您为匹配的每个字符执行函数,但只有在您定义了对象的条目(否则返回原始字符)时才进行交换.

它显然更昂贵(因此最好使用第一个示例)但在这种情况下,您可以避免列出要在正则表达式中匹配的所有字符.