正则表达式,用于在键入时匹配用户输入字符串

时间:2012-10-28 01:10:39

标签: regex autocomplete

有没有不同的方法来构建这样的正则表达式...

/^52\s*quarts(\s*\,*\s*|\s+)motor oil(\s*\,*\s*|\s+)las vegas(\s*\,*\s*|\s+)nv/i

...这样,“52夸脱机油”所返回的匹配将是 [“52夸脱机油拉斯维加斯”]

我正在尝试将缓存添加到jQuery自动完成的使用中,并且我想将用户输入与正则表达式的准备列表进行动态匹配。因为我需要事先准备匹配的表达式,所以它们不能因为它们比完成的用户输入字符串更长而不匹配!

1 个答案:

答案 0 :(得分:0)

我简化了你的正则表达式:

/^52[\s,]*quarts[\s,]*motor oil[\s,]*las vegas[\s,]*nv/i

如果你想以任何顺序允许单词,你可以使用前瞻:

/^(?=.*52)(?=.*quarts)(?=.*motor oil)(?=.*las vegas)(?=.*nv)/i

这种前瞻性的想法非常接近基于文本的搜索引擎的工作方式

编辑:

部分比赛变得有点难看。以下是您在单词的任何部分上的匹配方式 - 换句话说就是“开始时”匹配:

l(a(s( (v(e(g(a(s)?)?)?)?)?)?)?)?

要求至少“拉斯维加斯”,请执行以下操作:

las ve(g(a(s)?)?)?

这非常糟糕。但它确实存在。
您可以使用所有条款执行此操作。