假设我有一个类似的搜索字词:"ice cream"
让我说我有三个字符串如此:
["Jeni's Ice Cream","Ice Cream Labs","Zumbacream"]
如何使用正则表达式匹配列表中的前两项而不是第三项?
答案 0 :(得分:3)
var items = ["Jeni's Ice Cream","Ice Cream Labs","Zumbacream"]
var searchTerm = 'Ice Cream';
for (var i = 0; i < items.length; i++){
if (items[i].indexOf(searchTerm) > -1){
console.log(items[i] + " - matched");
} else {
console.log(items[i] + " - unmatched");
}
}
对于非敏感的套管
var items = ["Jeni's Ice Cream","Ice Cream Labs","Zumbacream"]
var searchTerm = 'ice cream';
searchTerm = searchTerm.toLowerCase();
for (var i = 0; i < items.length; i++){
if (items[i].toLowerCase().indexOf(searchTerm) > -1){
console.log(items[i] + " - matched");
} else {
console.log(items[i] + " - unmatched");
}
}
或者,您可以创建一个Array原型并使用过滤器函数
Array.prototype.search = function(searchTerm, caseSensitive){
if (!caseSensitive){
searchTerm = searchTerm.toLowerCase();
}
function search(value){
if (!caseSensitive){
value = value.toLowerCase();
}
return value.indexOf(searchTerm) > -1;
}
return this.filter(search);
}
使用此
items.search('ice cream', false)
这将返回
["Jeni's Ice Cream", "Ice Cream Labs"]
答案 1 :(得分:0)
虽然这在大规模上效率低下(这是制作数据库引擎的原因之一),但您可以索引每个项目并查看它是否与searchTerm
匹配
var searchTerm = "ice cream",
searchTermRgx = new RegExp(searchTerm, "i");
database = [
"Jamen's Ice Cream Shop",
"Dat good ice cream",
"Pizza Place",
"More Ice Cream"
], i,
searchResults = [];
for (i=0; i<database.length; i++) {
if ((searchTermRgx).test(database[i])) searchResults.push(database[i]);
}
document.body.innerHTML = searchResults;
(请注意,使用RegEx i
运算符,它不区分大小写)
答案 2 :(得分:0)
要添加杨力的答案,我会将搜索词分成一个空格,以便您可以检查字符串是否包含搜索词,但是词的顺序无关紧要,即如果它匹配字符串包含搜索词的每个单词,但不一定是相同的顺序:
var items = ["Jeni's Ice Cream","Ice Cream Labs","Zumbacream"]
var searchTerm = 'Ice Cream';
searchTerm = searchTerm.toLowerCase();
var searchTerms = searchTerms.split(' ');
for (var i = 0; i < items.length; i++){
for (var i2 = 0; i < searchTerms.length; i2++){
if (items[i].toLowerCase().indexOf(searchTerms[i2]) == -1) { // if the string we're checking does not contain a word in the search term
break;
} else if (i2 < searchTerms.length - 1) { // or if it's not the last word of the search term
continue;
}
// if it's the last search term and the string contains all of the search words
alert(items[i] + " - matched");
}
}
答案 3 :(得分:0)
对于正则表达式版本:
var items = ["Jeni's Ice Cream","Ice Cream Labs","Zumbacream"];
var term = /Ice Cream/i;//take the i out for a case sensitive search
var matched = items.filter(function(comp){return comp.match(term) != null;});