我正在尝试创建一个函数来查找包含数组中所有单词的字符串。
我试过这个:
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"];
我希望应用程序在找到字符串句子中数组中的所有单词时提醒我。不是只找到其中一个词。
答案 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;
要检查完整的单词,请使用单词边界。
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)
这是你在寻找什么?通过这种方式,您可以使用包含非字母数字字符的更复杂的句子。
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;
答案 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()是否足以在文本中包含一个列表词