如何使用相应的字符列表替换字符串中的字符列表

时间:2015-06-30 09:32:53

标签: javascript

在像

这样的字符串中
"this is a sample string"

我怎样才能替换像

这样的字符列表
['t', 'h', 's', 'g']

带有相应的字符列表,如

['X', 'Y', 'Z', 'K']

以快速方式,并获得此结果:

"XYiZ iZ a Zample ZXrinK"

3 个答案:

答案 0 :(得分:3)

"this is a sample string".replace(/t|h|s|g/g, function(v) {
    var map = {t: 'X', h: 'Y', s: 'Z', g: 'K'}
    return map[v];
}); //output XYiZ iZ a Zample ZXrinK

注意:您可以通过以下方式加快速度:

  • 将regexp保存到变量中,而不是每次更换时都重新创建regexp。
  • 将地图保存到替换之外的变量中,因此每次替换触发函数时都不会重新创建地图

答案 1 :(得分:0)

检查以下代码

watch: {
        sass: {
            files: '<%= dir.sass %>/**/*.scss',
            tasks: ['sass'],
        },

        js: {
            files: '<%= dir.js_dev %>/**/*.js',
            tasks: ['newer:jshint', 'copy:js_vendor', 'copy:js'],
        },

        img: {
            files: '<%= dir.img_dev %>/**/*.{png,jpg,jpeg,gif,svg}',
            tasks: ['newer:imagemin']
        },

        // grunt: {
        //   files: 'Gruntfile.js'
        // }
    }

输出:这是一个样本STrinG

答案 2 :(得分:0)

function mapReplace(str, map) {
    return str.split('').reduce(function(acc, c) {
        acc.push(map[c] === undefined ? c : map[c]);
        return acc;
    }, []).join('');
}

//returns 'XYiZ iZ a Zample ZXrinK'
mapReplace("this is a sample string", {t: 'X', h: 'Y', s: 'Z', g: 'K'});

此替代方法应该比正则表达式更快。<​​/ strike>

在实际运行基准测试之后,很明显正则表达式取代了这种方法4比1:

  • RegExp x 325,181 ops / sec±0.46%(96次采样)
  • MapReplace#x 84,956 ops / sec±0.36%(97次采样)