我知道如何找出一个字符串是否包含这样的子字符串,您要查找一个单词:
var s = "define foo";
alert(s.indexOf("define") > -1);
示例不能正常工作的代码在我的脑海中有意义但不起作用:
query = "Define what is grape juice and how to drink it?"
var terms = ["define", "what is", "how to"];
alert(query.indexOf(terms) > -1);
感谢〜!
答案 0 :(得分:1)
您想查看数组是否包含字符串。有几种方法可以做到这一点。这个答案很好here。
以下是2个选项,从那里复制:
选项1:
$.indexOf
实际上是支持它的浏览器中的Array.prototype.indexOf
的包装器(现在几乎所有的浏览器),同时为那些不支持它的人提供垫片。它本质上相当于向Array.prototype
添加一个垫片,这是一种更惯用/ JSish的做事方式。 MDN提供such code。这些天我会采用这个选项,而不是使用jQuery包装器。
选项2:
jQuery提供$.inArray
:
var found = $.inArray('specialword', categories) > -1;
请注意,inArray返回找到的元素的索引,因此0
表示该元素是数组中的第一个元素。 -1
表示找不到该元素。
答案 1 :(得分:1)
试试这个:
var phrase = 'texttexttexttexttexttexttext';
var terms = ['word1', 'word2', 'word3'];
function check(string) {
var match = false;
for(var i=0;i<terms.length && !match;i++) {
if(string.indexOf(terms[i]) > -1) {
match = true;
}
}
return match;
}
//example
if(check(phrase)) {
//iftrue
} else {
//iffalse
}
答案 2 :(得分:1)
您可以在jQuery中使用$.each()
来遍历terms
数组,并针对字符串单独检查每个数组。在下面的代码中,我创建了一个名为matchedTerms
的新JSON对象,它将在字符串中记录术语及其索引。请参阅此处的演示:http://jsfiddle.net/teddyrised/ktuuoprp/1/
var query = "Define what is grape juice and how to drink it?",
terms = ["define", "what is", "how to"],
matchedTerms = [];
$.each(terms, function(i,v) {
var match = query.indexOf(v);
matchedTerms.push({
'term': v,
'index': match
});
});
更好的是:您可以在那里构建条件语句,以便matchedTerms
只生成一个简单的数组。请参阅此处的演示:http://jsfiddle.net/teddyrised/ktuuoprp/2/
var query = "Define what is grape juice and how to drink it?",
terms = ["define", "what is", "how to"],
matchedTerms = [];
$.each(terms, function(i,v) {
var match = query.indexOf(v);
if(match > -1) matchedTerms.push(v);
});
console.log(matchedTerms);
p / s:如果要执行不区分大小写的匹配,将查询转换为小写有帮助,即newQuery = query.toLowerCase(query);