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

时间:2014-11-14 17:18:51

标签: javascript

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

以下是一个示例,checkTitle是我提取的文字,我想在其中搜索某些关键字,在本例中,是compareTitle中逗号分隔的字词。我想搜索字符串'5''monkeys'

var checkTitle = "5 monkeys jumping on the bed";
var compareTitle = "5 , monkeys";

if (checkTitle === compareTitle) {
    // ...
}

2 个答案:

答案 0 :(得分:0)

您可以使用regular expressions搜索字符串,如果字符串包含单词,则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!
}

答案 1 :(得分:0)

使用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
}

如果这个答案比第一个好,那么请接受这个答案。请求任何更多帮助,或者它是否无效。