是否有代码大小的任何具体限制吗?我的意思是,这不是代码高尔夫或其他任何东西,那么为什么不直接以简单的方式来做呢?
首先,你可以用一个简单的正则表达式记号化这个
var search_string = "hello before: 01/01/17 after: 01/01/2015";
var regex = /(?:(before|after)\:\s*)?([^ ]*)/g
var token = null;
while ((token = regex.exec(search_string)) != null) {
然后,你可以把他们安排到你想要的任何数据结构。例如,我们可以把过滤器到一个单独的对象,像这样:
var filters = {};
var words = [];
//...
if (token[1])
filters[token[1]] = token[2];
else
words.push(token[2]);
之后,你可以操纵这些结构你想
words.sort();
if (filters['before']) words.push(filters['before']);
if (filters['after']) words.push(filters['after']);
return words;
任何办法,我不知道为什么你”我希望这样安排,但这会使事情变得统一。或者,你可以在一个更直接的方式使用它们:
var before = Date.parse(filters['before'] || '') || false;
if (before !== false) before = new Date(before);
var after = Date.parse(filters['after'] || '') || false;
if (after !== false) before = new Date(before);
function isDocumentMatchSearch(doc) {
if (before !== false && doc.date > before) return false;
if (after !== false && doc.date < after) return false;
for (var i = 0; i < words.length; i++) {
if (doc.title.indexOf(words[i]) < 0 &&doc.text.indexOf(words[i]) < 0) return false;
}
return true;
}
因为你没给很多的信息,你通过搜索什么,它的存储,等等等等的数据类型和存储类型,这是我能提供的最好的。
我想通了,如何解决这个字的时候是之前的任何过滤器,但我无法分割了绳子,如果这个词是在字符串 –