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

Eni*_*ter 7 javascript regex

看到谷歌的愚人节的莫尔斯电码的Gmail的笑话后,我想我会尝试使用JavaScript创建一个实时的莫尔斯电码转换器.

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

.replace(/.- /g, "a").replace(/.-. /g, "r")
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我输入.-."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

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

Sha*_*hin 1

其他答案已经涵盖了您的示例不起作用的原因,因此我将避免重复它们。

但是,我可以建议,由于您已经使用空格来分隔每个代码,因此一个直接的解决方案是将.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("");
Run Code Online (Sandbox Code Playgroud)

这是一个工作示例: http: //jsfiddle.net/KGVAm/1/

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