0

このような正規表現を作成する別の方法はありますか...

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

...「52クォートのモーターオイルラスベガス」に対して返される一致は[ 「52クォートのモーターオイルラスベガス」]になりますか?

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 に答える