2016-04-25 15 views
0

私はJavaScriptを学び、同様のフレーズのための正規表現パターンを開発しようとしています。私は交代を理解しようとしているが、この正規表現の結果は、それが唯一のshow me a picture & show me a photoではなくshow me a photographと一致するということですフレーズ内の類似した単語を含む正規表現の変更

var regEx = /(?:[^"']|^)(show me a picture|show me a photo|show me a photograph)(?!["'])/i; 

:ここで私は、現在持っているものです。私の理解は、正規表現はすでにshow me a photoを見つけたので、そこで停止します。

show me a photographというフレーズも考慮する正規表現が見つかりません。

おそらくこれがこれを行う最も効率的な方法ではないため、私はこの問題を抱えています。

+0

はちょうど私photograph'を示し'入れを: 'VAR正規表現を= /(?:[^」写真を見せてください)(?!["'])/ i;' – TAGraves

答えて

1

このような全体のフレーズ(単語)を取得するためにあなたの正規表現を変更します。私のphoto`示し `前

var regEx = /(?:[^"']|^)(\bshow me a picture\b|\bshow me a photo\b|\bshow me a photograph\b)(?!["'])/ig; 
+0

この方法は他の回答と同じようにフレーズの順番を変えるより効果的ですか?提案する?どちらの方法も同じ効果を持っているように見えますが、別の方法でそれを検討しています。 – filmplane

+0

それはあなたに完全なフレーズマッチを与える。実際、この例では 'var regEx = /(?:[^" '] | ^)(\ bshow me ap(i | h)\ w + \ b)(?![ '])/ ig; ' –

+0

興味深い!私はこの方法も好きです。なぜなら、正確なフレーズマッチを返さないという点でもう少し柔軟性があるからです。私はこれが可能であることを知らなかった。さまざまなパターンの例があると非常に役に立ちます。 – filmplane

0

JavaScriptの正規表現の仕様はこれを言う:

|正規表現演算子は二つの選択肢を分離します。パターンは最初に左のAlternative(正規表現の続編が続きます)と一致するようにします。それが失敗すると、正しいDisjunction(正規表現の続編が続きます)と一致するように試みます。

したがって、show me a photo|show me a photographの一致を求める場合は、左側の選択肢が常に優先されます。 photographが優先されるようにするには、他の順序に入れてください。

関連する問題