Javascript - поиск и замена конкретных слов - PullRequest
0 голосов
/ 03 октября 2018

Я хотел бы создать текстовое поле, которое пользователь может использовать для поиска испанских эквивалентов английских слов.Но вместо того, чтобы просто вводить слово, они должны набрать весь вопрос.

Пример: Ввод пользователя: «Как вы говорите, человек по-испански?»Ожидаемый результат: «Вы говорите, Хомбре».

Я использую оператор switch, так как у пользователя будут другие вопросы.Как я могу использовать регулярное выражение в регистре переключателей для поиска слова, значение которого пользователь хочет знать, и заменить его на испанский эквивалент?

Я знаю, как использовать регулярное выражение для замены, скажем, пятогослово в предложении (в вышеприведенном случае будет "человек") с "хомбре"Но поскольку пользователь может запросить слова, отличные от «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>

Я хотел бы иметь возможность определить, какое слово пользователь набрал вместо ххх, и использовать испанский эквивалент этого слова в ответе, которыйзначит, мне также нужно было бы иметь способ сказать, что мужчина = хомбре, женщина = мухер, ребенок = нино ...

Я немного растерялся, как этого добиться.Любая помощь?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Если вы хотите, чтобы предложение формулировалось точно так же, как каждый раз, вы можете использовать выражение /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 слов.

0 голосов
/ 03 октября 2018

Поскольку это небольшой проект с минимальным переводом, я бы предложил просто сохранить слова в объекте.Вы можете сделать английское слово ключом, а испанское слово - значением.чтобы получить пятое слово, которое вы можете разделить на пробел, и получить пятый элемент возвращаемого массива.

В приведенном ниже примере вам также необходимо добавить некоторую обработку ошибок, чтобы обрабатывать, когда объект не имеетключ с пятым словом

Вот пример:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...