如何使用Javascript正则表达式匹配乱序字符串

时间:2012-04-11 09:25:09

标签: javascript regex

我在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;
  }
}

非常感谢你的时间。

克里斯

2 个答案:

答案 0 :(得分:3)

建议使用RegExp代替eval。

DEMO

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)

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