eri*_*len 9 javascript regex sql sql-like
如何LIKE在JavaScript中模拟SQL关键字?
对于那些不知道是什么的人LIKE来说,它是一个非常简单的正则表达式,它只支持通配符%,它匹配0个或更多字符,并且_只匹配一个字符.
但是,它不仅可以做以下事情:
var match = new RegEx(likeExpr.replace("%", ".*").replace("_", ".")).exec(str) != null;
Run Code Online (Sandbox Code Playgroud)
...因为图案可能包含点,星星和任何其他特殊的正则表达式字符.
Chr*_*tal 10
只要您第一次逃避模式中的正则表达式字符,您所拥有的就会起作用.以下是Simon Willison博客的一个例子:
RegExp.escape = function(text) {
if (!arguments.callee.sRE) {
var specials = [
'/', '.', '*', '+', '?', '|',
'(', ')', '[', ']', '{', '}', '\\'
];
arguments.callee.sRE = new RegExp(
'(\\' + specials.join('|\\') + ')', 'g'
);
}
return text.replace(arguments.callee.sRE, '\\$1');
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将代码实现为:
likeExpr = RegExp.escape(likeExpr);
var match = new RegEx(likeExpr.replace("%", ".*").replace("_", ".")).exec(str) != null;
Run Code Online (Sandbox Code Playgroud)
我一直在寻找同样问题的答案,并在阅读了基普的回复后想到了这个:
String.prototype.like = function(search) {
if (typeof search !== 'string' || this === null) {return false; }
// Remove special chars
search = search.replace(new RegExp("([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:\\-])", "g"), "\\$1");
// Replace % and _ with equivalent regex
search = search.replace(/%/g, '.*').replace(/_/g, '.');
// Check matches
return RegExp('^' + search + '$', 'gi').test(this);
}
Run Code Online (Sandbox Code Playgroud)
然后您可以按如下方式使用它(请注意,它忽略大写/小写):
var url = 'http://www.mydomain.com/page1.aspx';
console.log(url.like('%mydomain.com/page_.asp%')); // true
Run Code Online (Sandbox Code Playgroud)
注 2013 年 11 月 29 日:RegExp.test()根据下面的 Lucios 评论更新了性能改进。