在MySQL中我用類似條款:什麼是MySQL的%LIKE%子句的JavaScript等價物?
LIKE %some keyword%
對數據庫中的記錄進行搜索。我可以用什麼來類似地在JavaScript中進行搜索?因此,如果用戶輸入類似
ger
它會顯示
german shepard
無法使用:
str.search('ger');
因爲它似乎只匹配整個單詞
在MySQL中我用類似條款:什麼是MySQL的%LIKE%子句的JavaScript等價物?
LIKE %some keyword%
對數據庫中的記錄進行搜索。我可以用什麼來類似地在JavaScript中進行搜索?因此,如果用戶輸入類似
ger
它會顯示
german shepard
無法使用:
str.search('ger');
因爲它似乎只匹配整個單詞
它與%LIKE%
不完全相同,但可以使用indexOf()
。
var str = "Mohsen",
st = "Moh";
if(str.indexOf(st) > -1) // true
我我不確定你在使用類似的運算符(例如表單域)的上下文中,但你可能想要利用它javascript的正則表達式對象。
一個簡單的例子(在你的情況下,對於LIKE
查詢),可能是這樣的:
var regex = /.*ger.*/
var matchesRegex = regex.test(yourString);
if (matchesRegex) {
//do something
}
或者,您可以搜索使用indexOf
操作您的字符串的發生:
var matches = yourString.indexOf("ger") >= 0 ? true : false;
if (matches) {
//do something
}
我不知道如果所有的瀏覽器都支持所有的這些方法:http://www.javascriptkit.com/jsref/string.shtml
但它看起來像有一個String.match()
方法會做你想做的。
search
函數不僅返回整個單詞。也許你得到的事實混淆返回從零開始的索引,所以......
// this returns 0 as positive match at position 0
"german shepherd".search('ger')
// this returns -1 as negative match
"german shepherd".search('gerx')
所以,你需要做的對抗-1搜索結果的對比,看看它是否是匹配或不 - 你不能只檢查真/假。
所以,你可以做...
if(str.search('ger') !== -1){
// matches string
} else {
// does not match string
}
// or another way
// add one to convert result to one-based index, and check truthiness
if(str.search('ger')+1){
// there is a match
} else {
// there is not a match
}
假設你已經得到了作爲一個字符串數組了一系列的記錄,你可以使用JavaScript built-in Array.filter
method:
var ss = ['german shepard', 'labrador', 'chihuahua'];
var matches = ss.filter(function(s) {
return s.match(/ger/);
};
matches; // => ['german shepard']
或者,如果你的目標的JavaScript沒有實現該方法(例如它在第5版之前實現ECMAScript),那麼你可以做一個簡單的數組搜索,例如:
var searchArray = function(arr, regex) {
var matches=[], i;
for (i=0; i<arr.length; i++) {
if (arr[i].match(regex)) matches.push(arr[i]);
}
return matches;
};
searchArray(ss, /h/); // => ['german shepard', 'chihuahua']
這是一個在JQuery中使用它的簡單方法。
這使用通過表格行上的數據過濾器過濾表格中的文本數據,但它可以很容易地用於其他目的。
$('#search').on('keyup', function() {
var val = $.trim(this.value);
if (val) {
$('tr[data-filter!=' + val + ']').hide();
$('tr[data-filter^=' + val + ']').show();
} else {
$('tr[data-filter]').show();
}
});
在這個例子中,將隱藏在那裏的完全匹配的沒有發現所有的錶行,然後由字符串值開始進行篩選。 trim()函數在所有空白處都是有用的,那麼它仍然會顯示一切,就好像搜索從未做過一樣。如果您希望它在字符串上的任何位置顯示搜索的輸入,請使用*而不是^。這兩個特殊字符都區分大小寫。還要確保hide命令首先顯示,並且兩者都存在,否則將無法正常工作。
這裏來看看另一個例子是利用兩個^且*字符: http://jsfiddle.net/heatwaveo8/2VKae/
你的脫線是落後的。 '>'不是'<' – Wiseguy
genious:D ...呃我討厭min評論長度 –
你抓住我!呃我討厭最小評論長度 – Mohsen