回答:
ルックアラウンドを使用してチェックを行うことができます:
^(?=.*\bjack\b)(?=.*\bjames\b).*$
このアプローチには、複数の条件を簡単に指定できるという利点があります。
^(?=.*\bjack\b)(?=.*\bjames\b)(?=.*\bjason\b)(?=.*\bjules\b).*$
vim構文:^\(.*\<jack\>\)\@=\(.*\<james\>\@=\).*$または\v^(.*<jack>)@=(.*<james>)@=.*$
^(?=.*\b#friday\b)(?=.*\b#tgif\b).*$一致しなかったblah #tgif blah #friday blahが、^(?=.*\bfriday\b)(?=.*\btgif\b).*$罰金を動作します。
\bここはどういう意味ですか?
試してください:
james.*jack
同時に両方が必要な場合は、次のorようにします。
james.*jack|jack.*james
james.*?jack|jack.*?jamesます。これは大きなテキストに役立ちます。
これから書くコマンドの説明:-
. 任意の文字を意味し、の代わりに数字を使用できます。
* 直前に書かれたもののゼロ個以上の出現を意味します。
|「または」を意味します。
そう、
james.*jack
検索しjames 、jackが来るまで任意の数の文字を検索します。
またはあなたが欲しいのでjack.*jamesjames.*jack
したがって、コマンド:
jack.*james|james.*jack
その短くて甘い
(?=.*jack)(?=.*james)
jackand Onejames念のため、2つjackまたは2つjamesは許可されずjack、1つだけjamesが有効になるため、次のような式を設計できます。
^(?!.*\bjack\b.*\bjack\b)(?!.*\bjames\b.*\bjames\b)(?=.*\bjames\b)(?=.*\bjack\b).*$
ここでは、これらのステートメントを使用して、これらのペアインスタンスを除外します。
(?!.*\bjack\b.*\bjack\b)
そして、
(?!.*\bjames\b.*\bjames\b)
それを単純化して
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$
式を簡略化/変更/探索する場合は、regex101.comの右上のパネルで説明されています。必要に応じて、このリンクで、サンプル入力とどのように一致するかを確認することもできます。
jex.imは正規表現を視覚化します。
const regex = /^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$/gm;
const str = `hi jack here is james
hi james here is jack
hi james jack here is jack james
hi jack james here is james jack
hi jack jack here is jack james
hi james james here is james jack
hi jack jack jack here is james
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
jackとワンjames特定の順序で次のように、first jameslastにも設計できますjack。
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b.*\bjack\b).*$
およびその逆:
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjack\b.*\bjames\b).*$