在MySQL中我使用like语句:
LIKE %some keyword%
我想在数据库记录上执行搜索操作。我可以使用什么类似的方法来在 JavaScript 中进行搜索呢?因此,如果用户输入了一些内容
ger
它会显示
german shepard
无法使用:
str.search('ger');
因为它似乎只匹配整个单词
在MySQL中我使用like语句:
LIKE %some keyword%
我想在数据库记录上执行搜索操作。我可以使用什么类似的方法来在 JavaScript 中进行搜索呢?因此,如果用户输入了一些内容
ger
它会显示
german shepard
无法使用:
str.search('ger');
因为它似乎只匹配整个单词
虽然不完全等同于%LIKE%
,但你可以使用indexOf()
。
var str = "Mohsen",
st = "Moh";
if(str.indexOf(st) > -1) // true
我不确定你在什么情况下使用了 like 运算符(例如,一个表单字段),但你可能希望利用 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
}
indexOf
或其他字符串操作完成的。 - NT3RPsearch
函数不仅返回完整的单词。也许你因为它返回从零开始的索引值而感到困惑,所以......
// this returns 0 as positive match at position 0
"german shepherd".search('ger')
// this returns -1 as negative match
"german shepherd".search('gerx')
所以你需要将搜索结果与-1进行比较,以确定它是否匹配,你不能仅仅检查true/false。
因此,你可以这样做...
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
}
Array.filter
方法:var ss = ['german shepard', 'labrador', 'chihuahua'];
var matches = ss.filter(function(s) {
return s.match(/ger/);
});
matches; //output => ['german shepard']
如果你的目标JavaScript没有实现该方法(例如,它实现了第五版之前的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/); //output => ['german shepard', 'chihuahua']
我假设您有来自数据库的数据,就像这样
let names = ['yusuf', 'sabri', 'bayrakdar'];
在编程中,你应该在过滤器
中使用includes
:
let searchValue = 'usu'
let filteredNames = names.filter(name => name.includes(searchValue));
filteredNames 将会是 ["yusuf"]
这里有一个在JQuery中实现的简单方法。
它使用了通过表格行上的data-filter对文本数据进行过滤,但它也可以轻松地用于其他目的。
$('#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();
}
});
我不确定所有浏览器是否支持这些方法:http://www.javascriptkit.com/jsref/string.shtml
但是看起来有一个String.match()
方法可以实现你想要的功能。
我的代码:
// file name 1 = "E_000096_01.jpg"
// file name 2 = "E_000096_02.jpg"
// file name 3 = "E_000096_03.jpg"
// file name 4 = "E_000095_01.jpg"
var code = "000096";
var files = fs.readdirSync(dir).filter(file => file.indexOf(code) >= 0 ? true : false)
// result
console.log(files)
//["E_000096_01.jpg","E_000096_02.jpg","E_000096_03.jpg"]
>
而不是<
。 - Wiseguy