什么是MySQL%LIKE%子句的JavaScript等价物?

时间:2011-09-30 20:55:28

标签: javascript mysql

在MySQL中我使用like子句:

LIKE %some keyword% 

执行数据库记录搜索。我可以用什么方式在JavaScript中进行类似的搜索?因此,如果用户输入类似

的内容
ger

它会显示

german shepard

无法使用:

str.search('ger');

因为它似乎只匹配整个单词

7 个答案:

答案 0 :(得分:26)

它与%LIKE%不完全相同,但您可以使用indexOf()

var str = "Mohsen",
    st = "Moh";

if(str.indexOf(st) > -1) // true

答案 1 :(得分:5)

我不确定您使用类似运算符的上下文(例如表单字段),但您可能希望利用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
}

答案 2 :(得分:2)

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
}

答案 3 :(得分:1)

假设你有一堆记录作为字符串数组,你可以使用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']

答案 4 :(得分:0)

我不确定所有浏览器是否支持所有这些方法:http://www.javascriptkit.com/jsref/string.shtml

但看起来有String.match()方法可以做你想做的事。

答案 5 :(得分:0)

这是在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()函数在所有空格都有空的情况下很有用,然后它仍然会显示所有内容,就像从未进行过搜索一样。如果您希望它在字符串的任何位置显示搜索到的输入,请使用*而不是^。两个特殊字符都区分大小写。还要确保隐藏命令首先显示,并且两者都存在,否则它将无法正常工作。

请参阅此处另一个使用^和*字符的示例: http://jsfiddle.net/heatwaveo8/2VKae/

答案 6 :(得分:0)

我的代码:

// 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"]