Javascript-搜索和替换特定单词

时间:2018-10-03 13:43:36

标签: javascript regex dictionary replace

我想创建一个文本框,用户可用来搜索与英语单词对应的西班牙语。但是,他们不仅要输入单词,还必须输入整个问题。

示例: 用户输入:“您怎么说西班牙语的人?”预期输出:“您说Hombre。”

我正在使用switch语句,因为用户还会询问其他问题。如何在开关盒中使用正则表达式来搜索用户想知道的含义的单词,并将其替换为与西班牙语等效的单词?

我知道如何使用正则表达式将句子的第五个单词(在上述情况下为“ man”)替换为“ hombre”。但是,由于用户可以要求输入“ man”以外的其他单词,因此我要怎么做才能用许多西班牙语单词之一替换第5个单词,具体取决于第5个单词是什么?

我希望我足够清楚让您理解。

这就是我所拥有的:

function myFunction() {
    var text;
    var words = document.getElementById("myInput").value.toLowerCase();
    
    switch(words) {
		case "hello":
            text = "Hello, my friend.";
            break;
        case "how do you say xxx in spanish?":
            text = "You say yyy.";
            break;
        default:
        text = "I don't know what you mean...";
    }
    document.getElementById("answer").innerHTML = text;
}

function translate() {
    var str = document.getElementById("answer").innerHTML; 
    var txt = str.replace("yyy","*spanish word*");
    document.getElementById("answer").innerHTML = txt;
}
<p>Ask for the Spanish equivalent of an English word.</p>
<input id="myInput" type="text" size="50">
<button onclick="myFunction();translate()">Ask</button>
<p id="answer"></p>

我希望能够检测到用户在xxx处键入的单词,并在答案中使用该单词的西班牙语等效项,这意味着我还需要一种方法来告知man = hombre ,女人= mujer,孩子=niño...

我对如何实现这一目标感到迷茫。有帮助吗?

2 个答案:

答案 0 :(得分:1)

由于它是一个翻译最少的小项目,我建议您将单词保留在一个对象中。您可以将英语单词作为键,将西班牙语单词作为键。要获得第五个单词,您可以在空格上分割并获得返回数组的第五个元素。

在下面的示例中,当对象没有第五个单词的键时,您还需要添加一些错误处理来处理

这里是一个例子:

var trans = {
  "man": "hombre",
  "book": "libro"
}

function translate() {
  var text;
  var words = document.getElementById("myInput").value;
  // split returns an array with space as a delimiter
  // then get the 5th element from the array (remember it starts at 0)
  // then turn it to lower case
  var fifthWord = words.split(" ")[4].toLowerCase();
  // use the word as a key for the trans object to return the Spanish value
  document.getElementById("answer").innerHTML = "You say: " + trans[fifthWord];
}

document.getElementById("ask").addEventListener("click", translate);
<p>Ask for the Spanish equivalent of an English word.</p>
<input id="myInput" type="text" size="50" value="How do you say Man in Spanish">
<button id="ask">Ask</button>
<p id="answer"></p>

答案 1 :(得分:1)

如果您希望每次都用完全相同的措词来表达句子,则可以使用表达式/how do you say \w+ in spanish\?/i来匹配输入,使用表达式/say (\w+)/i来捕获要翻译的单词。

function myFunction() {
    var text;
    var words = document.getElementById("myInput").value.toLowerCase();
    
    if (words === "hello") {
        text = "Hello, my friend.";
    } else if (words.match(/how do you say \w+ in spanish\?/i)) {
        // matched word is the second element
        var word = words.match(/say (\w+)/i)[1];
        // find the translation in the object
        var translation = lookup[word];
        text = "You say " + translation + ".";
    } else {
        text = "I don't know what you mean...";
    }
    document.getElementById("answer").innerHTML = text;
}

var lookup = {
    hello: "hola",
    goodbye: "adios"
}
<p>Ask for the Spanish equivalent of an English word.</p>
<input id="myInput" type="text" size="50">
<button onclick="myFunction()">Ask</button>
<p id="answer"></p>

要翻译该单词,您可以建立一个映射到西班牙语单词的英语单词对象,因为您说总共只有20个单词。