【问题标题】:How can I make a cryptogram encoder in JavaScript?如何在 JavaScript 中制作密码编码器?
【发布时间】:2014-01-26 02:01:05
【问题描述】:

我查看了其他页面,看看是否有办法用另一个字符替换所有出现的字符,到目前为止,我已经看到了在替换方法中使用正则表达式的建议,以及创建一个hashmap 保存所有要替换的值。经过一些手指魔术后,我想出了这个:

function encodeMe(input) {
    var chars = {
        "f" : "o",
        "o" : "b",
        "a" : "r"
    }
    var encodedMessage = input.replace(/[^ -~]/g, function(chr) {
        return (chr in chars) ? chars[chr] : "&#"+chr.charCodeAt(0)+";";
    });
    return encodedMessage;
}

问题在于,如果我提交“foo bar”,它会返回“foo bar”而不是“obb brr”。
我显然做错了什么,但我不知道是什么。有人可以帮我吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    将字符组中的-移到最后:[^ ~-]。否则,您将创建一个范围,表达式的意思是“不匹配位于(空格)和~之间的任何字符”,其中包括字母也是。

    http://www.asciitable.com/

    【讨论】:

    • 非常感谢!我对正则表达式比较陌生,所以我永远不会明白这一点。
    • 检查正则表达式字符后,我了解到我可以使用/./g 而不是/[^ ~-]/g,它的作用完全相同。
    【解决方案2】:

    另一种选择是不使用正则表达式,而只是遍历字符串并构建一个新的:

    function encodeMe(input) {
        var chars = {
            "f" : "o",
            "o" : "b",
            "a" : "r"
        }
        var newStringArray = [];
        for(var i=0; i < input.length; i++) {
            //if the current char is in the map, add the replacement
            //otherwise, add the char itself
            newStringArray.push(chars[input[i]] || input[i]);
        }
        return newStringArray.join("");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-19
      • 2018-03-19
      • 2019-03-26
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多