0

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

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

...这样它为“52 quarts motor oil las vega”返回的匹配项将是[“52 quarts motor oil las vega”]

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

4

1 回答 1

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”,请执行以下操作:

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

这很恶心。但它就在那里。
您可以使用所有条款来做到这一点。

于 2012-10-28T04:13:02.023 回答