Javascript中的实时摩尔斯电码转换器

在看到谷歌愚蠢的莫尔斯代码gmail笑话后,我想我会尝试在 javascript中创建一个实时莫尔斯代码转换器.

我正在使用正则表达式并替换以将莫尔斯代码更改为字符.例如:

.replace(/.- /g, "a").replace(/.-. /g, "r")

我遇到的问题是当我打字时.-.对于“r”,它给了我一个“a”,因为它看到了.-首先.
我怎样才能让它只替换完全匹配?

更新和工作!!感谢每一位帮助我的人

http://jsfiddle.net/EnigmaMaster/sPDHL/32/ – 我的原始代码

http://jsfiddle.net/EnigmaMaster/LDKKE/6/ – 由Shawn Chin改写

http://jsfiddle.net/EnigmaMaster/y9A4Y/2/ – 由Matthias Tylkowski改写

如果有人有其他方式撰写此计划,请发布JsFiddle

我很想知道如何做到这一点

其他答案已经涵盖了你的例子没有工作的原因所以我不会重复它们.

但是,我可以建议,因为您已经使用空格来划分每个代码,所以直接的解决方案是使用简单的.split()将输入文本分段为单个单元然后简单地进行一对一代码映射到字符.
这比重复的正则表达式替换更有效,并且不容易出错.

例如:

var morse = {  // use object as a map
    '.-': 'a', 
    '-...': 'b', 
    '-.-.': 'c', 
    // .... the rest ...
};

function translate_morse(code) {  // given code, return matching char
    return (typeof morse[code] === "undefined") ? "" : morse[code];
    // if the var is not found, the code is unknown/invalid. Here we 
    // simply ignore it but you could print out the code verbatim and use
    // different font styles to indicate an erroneous code
}

// example usage
translated = code_text.split(" ").map(translate_morse).join("");

这是一个有效的例子:http://jsfiddle.net/KGVAm/1/

附:我冒昧地调整了代码和行为,即禁用其他字符的输入,但允许backscape允许更正.

相关文章
相关标签/搜索