看到谷歌的愚人节的莫尔斯电码的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
我很想知道如何做到这一点
其他答案已经涵盖了您的示例不起作用的原因,因此我将避免重复它们。
但是,我可以建议,由于您已经使用空格来分隔每个代码,因此一个直接的解决方案是将.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 允许更正。
| 归档时间: |
|
| 查看次数: |
3939 次 |
| 最近记录: |