在看到谷歌愚蠢的莫尔斯代码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允许更正.