11

正規表現があまりわからないので、2 つの文字列に一致する正規表現を作成したいと考えています。

1 つの文字列のコードが.match(/something/)2 つの文字列に一致する場合は.match(/something|someotherthing/)

両方の文字列がテキスト内にある場合にのみ一致するものを作成する方法 (例: "google microsoft")

4

3 に答える 3

20

単一の正規表現でそれを行うには、どちらの順序でも発生する可能性があるという事実を考慮する必要があります。( .*2 つの部分文字列の間にある任意の文字に一致します):

/google.*microsoft|microsoft.*google/

注: 2 つ以上の部分文字列を実行したい場合、これは手に負えなくなります。3 つの文字列は6異なる順序で、5 つの文字列は異なる順序で120、10 の部分文字列は3628800異なる順序で並べることができます。そのため、Explosion Pills の回答のように、言語自体 (Javascript) の機能を使用する方が、正規表現でやりすぎるよりもはるかに優れている可能性があります。

于 2013-08-28T19:35:52.430 に答える
10

他の答えはあなたの特定の問題にはまったく問題ありませんが、Paulproが指摘したように、2つ以上の単語があると本当に手に負えなくなります.

最も簡単な方法は、Explosion Pills が示唆するように、複数のチェックを使用することです。

しかし、よりスケーラブルな正規表現のみのアプローチでは、先読みを使用できます。

/^(?=.*google)(?=.*microsoft)(?=.*apple).../

先読みは実際には何も消費しないため、最初の条件がチェックされた後 (.*google一致する可能性があります)、文字列の先頭に戻って次の条件をチェックできます。パターンは、すべての先読みが成功する場合にのみ成功します。

入力に改行が含まれている可能性がある場合は、そうで.*はないことに注意してください。[^]*or代わりに使用する必要があります[\s\S]*(他の回答についても同様です)。

于 2013-08-28T19:37:34.307 に答える
8

.match2回だけ使えます

str.match(/google/) && str.match(/microsoft/)

その場合は使った方が早いかもしれません.indexOf

詳細な正規表現を使用することもできます

.match(/google.*microsoft|microsoft.*google/)
于 2013-08-28T19:36:07.173 に答える