2

リタのchatopsボット用に持っている正規表現を少し修正しようとしています。次の正規表現があります。

/^(?:how\s+do\s+I\s+you\s+get\s+far\s+is\s+it\s+from\s+)?(.+)\s+to\s+(.+)/i

これは、「to」の前後の単語をキャプチャすることになっています。オプションの単語を前に付けて、次のような質問を形成できます: x から y までの移動方法、x から y までの距離、x から y までの距離。

期待される出力:

match 1 : "x"
match 2 : "y"

ほとんどの場合、オプションの単語は期待どおりに機能します。しかし、応答の一致を取得すると、最初のキャプチャ グループにつながる単語が含まれています。

したがって、how far is it from sfo to lax次を返す必要があります。

sfolax

しかし代わりに以下を返します:

how far is it from sfolax

4

2 に答える 2

3

あなたの不具合は、正規表現の最初のチャンクが意味をなさないことです。

複数のオプションから選択するには、次の構文を使用します。

(a|b|c)

あなたがやろうとしていると思うのはこれです:

/^(?:(?:how|do|I|you|get|far|is|it|from)\s+)*(.+)\s+to\s+(.+)/i

正規表現は、順序に関係なく、複数のオプションのすべての単語をスキップするように指示しています。

語順を保持したい場合は、次の疑似コードのような正規表現を使用できます。

… how (can|do|will) (I|you|we) (get|go|travel) from …
于 2015-03-21T22:07:09.683 に答える