回答:
ルックアラウンドを使用してチェックを行うことができます:
^(?=.*\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.*james
james.*jack
したがって、コマンド:
jack.*james|james.*jack
その短くて甘い
(?=.*jack)(?=.*james)
jack
and 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 james
lastにも設計できます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).*$