正規表現があまりわからないので、2 つの文字列に一致する正規表現を作成したいと考えています。
1 つの文字列のコードが.match(/something/)
2 つの文字列に一致する場合は.match(/something|someotherthing/)
両方の文字列がテキスト内にある場合にのみ一致するものを作成する方法 (例: "google microsoft")
正規表現があまりわからないので、2 つの文字列に一致する正規表現を作成したいと考えています。
1 つの文字列のコードが.match(/something/)
2 つの文字列に一致する場合は.match(/something|someotherthing/)
両方の文字列がテキスト内にある場合にのみ一致するものを作成する方法 (例: "google microsoft")
単一の正規表現でそれを行うには、どちらの順序でも発生する可能性があるという事実を考慮する必要があります。( .*
2 つの部分文字列の間にある任意の文字に一致します):
/google.*microsoft|microsoft.*google/
注: 2 つ以上の部分文字列を実行したい場合、これは手に負えなくなります。3 つの文字列は6
異なる順序で、5 つの文字列は異なる順序で120
、10 の部分文字列は3628800
異なる順序で並べることができます。そのため、Explosion Pills の回答のように、言語自体 (Javascript) の機能を使用する方が、正規表現でやりすぎるよりもはるかに優れている可能性があります。
他の答えはあなたの特定の問題にはまったく問題ありませんが、Paulproが指摘したように、2つ以上の単語があると本当に手に負えなくなります.
最も簡単な方法は、Explosion Pills が示唆するように、複数のチェックを使用することです。
しかし、よりスケーラブルな正規表現のみのアプローチでは、先読みを使用できます。
/^(?=.*google)(?=.*microsoft)(?=.*apple).../
先読みは実際には何も消費しないため、最初の条件がチェックされた後 (.*google
一致する可能性があります)、文字列の先頭に戻って次の条件をチェックできます。パターンは、すべての先読みが成功する場合にのみ成功します。
入力に改行が含まれている可能性がある場合は、そうで.*
はないことに注意してください。[^]*
or代わりに使用する必要があります[\s\S]*
(他の回答についても同様です)。
.match
2回だけ使えます
str.match(/google/) && str.match(/microsoft/)
その場合は使った方が早いかもしれません.indexOf
詳細な正規表現を使用することもできます
.match(/google.*microsoft|microsoft.*google/)