在字符串中搜索单词

时间:2017-06-17 12:44:13

标签: javascript regex

我正在尝试创建一个函数来查找包含数组中所有单词的字符串。

我试过这个:

function multiSearchOr(text, searchWords){
    var searchExp = new RegExp(searchWords.join("|"),"gi");
    return (searchExp.test(text))?"Found!":"Not found!";
}

alert(multiSearchOr("Hello my name sam", ["Hello", "is"]))

但是,当找到其中一个单词时,这只发出“发现”警告。

当所有单词都在字符串中时,我需要它提醒我。

一个例子:

var sentence = "I love cake"    
var words = ["I", "cake"];

我希望应用程序在找到字符串句子中数组中的所有单词时提醒我。不是只找到其中​​一个词。

5 个答案:

答案 0 :(得分:4)

如果您对仅使用单个正则表达式感兴趣,则在构造表达式时需要使用正向前瞻。它看起来像这样:

'(?=\\b' + word + '\\b)'

根据这种结构,您可以创建正则表达式并测试匹配:

function multiSearchOr(text, searchWords){
    var regex = searchWords
        .map(word => "(?=.*\\b" + word + "\\b)")
        .join('');
    var searchExp = new RegExp(regex, "gi");
    return (searchExp.test(text))? "Found!" : "Not found!";
}

答案 1 :(得分:0)

要检查字符串中是否存在数组中的每个单词,您需要遍历单词数组并检查字符串是否包含当前单词。如果字符串不包含该单词,请使用函数中的false值提前返回。否则,在检查字符串中的所有单词后返回true



function multiSearchOr(text, searchWords) {
  // Iterate over search words
  for (var i = 0, len = searchWords.length; i < len; i++) {

    // Create new regex. No need of `g` flag
    var regex = new RegExp(searchWords[i], 'i');
    if (regex.test(text) === false) {
      return false; // If not found, return with `false` status
    }
  }

  return true; // All words exists
}

console.log(multiSearchOr("Hello my name sam", ["Hello", "is"]) ? 'Found!' : 'Not Found!');
console.log(multiSearchOr("I love Cake", ["I", "cake"]) ? 'Found!' : 'Not Found!');
&#13;
&#13;
&#13;

要检查完整的单词,请使用单词边界。

new RegExp('\\b' + searchWords[i] + '\\b', 'i');

如果搜索词包含特殊字符,则需要使用Is there a RegExp.escape function in Javascript?转义它们。

答案 2 :(得分:0)

这是一个有效的例子。您只需要遍历数组并使用indexOf()比较字符串中是否存在单词。如果不相等则警告未找到,否则警报发现。

function multiSearchOr(text, searchWords){

   for(var i=0; i<searchWords.length; i++)
   {
    if(text.indexOf(searchWords[i]) == -1)
      return('Not Found!');
   }
   return('Found!');
}

alert(multiSearchOr("Hello my name sam", ["Hello", "is"]));

答案 3 :(得分:0)

这是你在寻找什么?通过这种方式,您可以使用包含非字母数字字符的更复杂的句子。

&#13;
&#13;
var sentence = "Hello, how are you ?"
var test1 = ["Hello", "how", "test"];
var test2 = ["hello", "How"];

function multiSearchOr(text, searchWords){
  if (text && searchWords) {
      var filteredText = text.match(/[^_\W]+/g);
      
      if (filteredText !== null) {
        var lowerCaseText = filteredText.map(function(word) { 
          return word.toLowerCase(); 
        });
        
        for (var i = 0; i < searchWords.length; i++) {
          if (lowerCaseText.indexOf(searchWords[i].toLowerCase()) === -1) {
            return "Not found!";
          }
        }
        
        return "Found!"
      }
    
      return "Error: the text provided doesn't contain any words!"
  }
  
  return "Error: Props are missing";
}

console.log(multiSearchOr(sentence, test1));
console.log(multiSearchOr(sentence, test2));
&#13;
&#13;
&#13;

答案 4 :(得分:0)

    if all(word in text for word in searchWords):
        print('found all')
    if any(word in text for word in searchWords):
        print('found at least one')

all(),如果您希望列表中的所有单词都在文本中 any()是否足以在文本中包含一个列表词