Javascript - 如何知道有多少字符串与另一个字符串匹配?

标签 javascript regex string substring

我一直在实现一个简单的英语测验。为此,我们需要验证用户在输入字段中输入的答案。在当前的实现中,我正在将正确答案与用户的答案进行准确比较。就像,

HTML

<input type="text" id="answer" />
<button onclick="validate()">Validate</button>

Javascript

var question = "Do you like movies?",
    answer = "No, I don't like movies.";

function validate() {
    var userInput = document.getElementById('answer').value;
    if(answer == userInput) {
      console.log("correct");
    } else {
      console.log("wrong");
    }
}

但我不想准确验证。例如,忽略区分大小写、逗号、撇号等。例如,如果用户输入,

i dont like movies

答案可能是正确的。我不知道如何开始以及从哪里开始。请大家帮忙。

最佳答案

一种选择是删除所有非单词字符和空格,并比较每个替换字符串的小写版本:

var question = "Do you like movies?",
  answer = "No, I don't like movies.";

const normalize = str => str
  .replace(/[^\w ]/g, '')
  .toLowerCase();
function validate(userInput) {
  const noramlizedInput = normalize(userInput)
  const noramlizedAnswer = normalize(answer);
  if (noramlizedInput == noramlizedAnswer) {
    console.log("correct");
  } else {
    console.log("wrong");
  }
}
validate('No i dont like movies');
validate("NO!!!!! I DON''t like movies.");

另一种选择是循环遍历 userInput 的所有可能的子字符串,并找出哪个子字符串与所需的答案重叠最多,但这要复杂得多.

一个更简单的选择是检查有多少个重叠的单词:

var question = "Do you like movies?",
  answer = "No, I don't like movies.";

const normalize = str => str
  .replace(/[^\w ]/g, '')
  .toLowerCase()
  .split(/\s+/)
function validate(userInput) {
  const noramlizedInputArr = normalize(userInput);
  const noramlizedAnswerArr = normalize(answer);
  const overlapCount = noramlizedInputArr.reduce((a, word) => (
    a + Number(noramlizedAnswerArr.includes(word))
  ), 0);
  console.log(overlapCount);
  if (overlapCount >= 4) {
    console.log("correct");
  } else {
    console.log("wrong");
  }
}
validate('No i dont like movies');
validate("NO!!!!! I DON''t like movies.");
validate("i dont like movies.");
validate("Yes I like movies.");

关于Javascript - 如何知道有多少字符串与另一个字符串匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51702316/

相关文章:

javascript - 未使用 JSONP API 中的信息创建对象

javascript - 在 Javascript 中计算数组中的数据类型

python - 通过函数 findall 获取唯一字符串

c++ - 检查多个字符串是否为空并打印它们的名称

javascript - 当浏览器导航到文件下载时如何显示页面内容?

javascript - 允许使用 bootstrap-datepicker 进行 1 天预订

javascript - jQuery 数据选择器中正则表达式的性能 : dependance on certain string length

javascript - 正则表达式错误 : The Expression took longer than 250ms to execute

c++ - 如何计算字符串 vector ?

python - 为什么字符串变量在更改时不更新