我在javascript中编写了一个实时过滤器,它从字段中获取值并隐藏表中不匹配的行。
我使用的RegEx非常简单:/ inputValue / i
虽然这很有效但它只匹配有序的字符。例如:
inputValue = test
string to match = this is a test sentence
此示例匹配,但如果我尝试:
inputValue = this sentence
string to match = this is a test sentence
这不会匹配,因为输入值无序。
我如何编写一个有序但可以跳过单词的RegEx?
这是我目前使用的循环:
for (var i=0; i < liveFilterDataArray.length; i++) {
var comparisonString = liveFilterDataArray[i],
comparisonString = comparisonString.replace(/['";:,.\/?\\-]/g, '');
RE = eval("/" + liveFilterValue + "/i");
if (comparisonString.match(RE)) {
rowsToShow.push(currentRow);
}
if(currentRow < liveFilterGridRows.length - 1) {
currentRow++;
} else {
currentRow = 0;
}
}
非常感谢你的时间。
克里斯
答案 0 :(得分:3)
建议使用RegExp代替eval。
var words = liveFilterValue.split(" ");
var searchArg = (words.length==1)?words:words.join(".*")+'|'+words.reverse().join(".*")
var RE = new RegExp(searchArg,"i");
它会创建this.*sentence|sentence.*this/i
+'|'+words.reverse().join(".*")
而不是this.....sentence
,请删除sentence....this
答案 1 :(得分:0)
您可以在空格上拆分输入字符串,然后按顺序为每个单词运行过滤器。