1

我用 javascript 编写了一个实时过滤器,它从字段中获取一个值并隐藏表中不匹配的行。

我使用的正则表达式非常简单:/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;
  }
}

非常感谢您的时间。

克里斯

4

2 回答 2

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

于 2012-04-11T12:39:52.867 回答
0

您可以将输入字符串拆分为空格,然后为每个单词按顺序运行过滤器。

于 2012-04-11T09:30:27.920 回答