关于javascript:如何通过数组检查字符串是否具有匹配的子字符串

How to check if string has a matching substring by array

问题

我知道如何找出一个字符串是否包含这样的子字符串,其中您要查找一个单词:

1
2
var s ="define foo";
alert(s.indexOf("define") > -1);

但是如何使用数组检查多个不同的单词/子字符串呢?

示例:不工作的代码在我看来是有意义的,但不起作用:

1
2
3
query ="Define what is grape juice and how to drink it?"
var terms = ["define","what is","how to"];
alert(query.indexOf(terms) > -1);

谢谢~!


可以在jquery中使用$.each()迭代terms数组,并根据字符串分别检查每个数组。在下面的代码中,我创建了一个名为matchedTerms的新JSON对象,该对象将在字符串中记录术语及其索引。参见演示:http://jsfiddle.net/teddyrised/ktuuprp/1/

1
2
3
4
5
6
7
8
9
10
11
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/ktuuprp/2/

1
2
3
4
5
6
7
8
9
10
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);


试试看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
}


要查看数组是否包含字符串。有几种方法可以做到。这里回答得很好。

这里有两个选项,复制自:

选项1:

$.indexOf实际上是Array.prototype.indexOf在支持它的浏览器(现在几乎所有浏览器)中的一个包装器,而在不支持它的浏览器中提供一个填充程序。它实质上相当于在Array.prototype中添加一个填充程序,这是一种更惯用的/jsish方式。MDN提供此类代码。这些天,我会选择这个选项,而不是使用jquery包装器。

选项2:

jquery提供$.inArray

1
var found = $.inArray('specialword', categories) > -1;

注意,in array返回找到的元素的索引,因此0指示元素是数组中的第一个。-1表示找不到元素。

例子。