在提取的文本 JavaScript 中搜索关键字

search for keyword in extracted text javascript

本文关键字:搜索 关键字 JavaScript 文本 提取      更新时间:2023-09-26

所以我设法提取了一些文本,然后将其保存为变量以供以后使用,如何测试所述文本中的某些关键字?

这里有一个例子,checkTitle是我提取的文本,我想在它里面搜索某些关键字,在这个例子中,用逗号分隔的单词compareTitle。我想搜索字符串'5''monkeys'

var checkTitle = "5 monkeys jumping on the bed";
var compareTitle = "5 , monkeys";
if (checkTitle === compareTitle) {
    // ...
}

您可以使用正则表达式搜索字符串,如果字符串包含单词,则使用 test() 函数返回 true/false。

/(?:^|'s)(?:(?:monkeys)|(?:5))'s+/gi.test("5 monkeys jumping on the bed");

将返回 true,因为字符串包含单词 5 和猴子(在本例中为两者)。

请看我的例子:http://regexr.com/39ti7 使用网站的工具来分析正则表达式的各个方面。

如果您需要更改每次测试的单词,则可以使用以下代码:

function checkForMatches(){
  var words = checkTitle.split(" , ");
  var patt;
  for (var i = 0; i < words.length; i++){
    patt = patt + "(" + words[i] + ")|";
  }
  patt[patt.length-1] = "";
  patt = new RegExp(patt, "i");
  return patt.test(checkTitle);
}

将返回 true,并允许要检查的任何单词。它们必须像这样分开:

compareText = "word1 , word2 , word3 , so on , ...";
//                  ^^^notice, space-comma-space.

您可以在 if 语句中使用它,如下所示:

var checkTitle = "5 monkeys jumping on the bed";
var compareTitle = "5 , monkeys";
if (checkForMatches()){
  //a match was found!
}

使用 String.prototype.contains() 方法,您可以在字符串中搜索子字符串。例如

"Hi there everyone!".contains("Hi");        //true
"Hi there everyone!".contains("there e");   //true
"Hi there everyone!".contains("goodbye");   //false

您也可以使用Array.prototype.indexOf()来实现类似的效果:

("Hi there everyone!".indexOf("Hi") > -1)   //true
("Hi there everyone!".indexOf("Hmmn") > -1) //false

但是,在此方法中,我们甚至不需要使用上述任何方法,因为.match()方法将为我们完成所有操作:

要返回匹配关键字的数组,请使用 .match() 。它接受正则表达式作为参数,并返回与正则表达式匹配的子字符串数组。

var checkTitle = "5 monkeys jumping on the bed";
var compareTitle = "5 , monkeys";
/*                   ^^^
  It is very important to separate each word with space-comma-space */
function getWords(str){ //returns an array containing key words
  return str.split(" , ");
}
function matches(str, words){
  var patt = "";
  for (var i = 0; i < words.length; i++){
    patt =  (i > 0)? patt + "|" + "(" + words[i] + ")" : patt + "(" + words[i] + ")";
  }
  patt[patt.length-1] = "";
  patt = new RegExp(patt, 'gi');
  //                        ^ i makes it case-insensitive
  return str.match(patt);
}
matches(compareTitle, getWords(checkTitle)); // should return ['5','monkeys']

您可以通过执行以下操作来检查是否存在匹配项:

if (matches(compareTitle, getWords(checkTitle))){
  // matches found
}

如果这个答案比第一个更好,那就接受这个答案。寻求更多帮助,或者如果它不起作用。