답변:
lookarounds를 사용하여 점검 할 수 있습니다 .
^(?=.*\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
. 큰 텍스트에 도움이됩니다.
내가 쓸 명령에 대한 설명 :-
.
모든 문자, 숫자 대신 자리가 올 수 있음을 의미합니다.
*
바로 앞에 쓰여진 것 이상의 0을 의미합니다.
|
'또는'을 의미합니다 .
그래서,
james.*jack
을 검색 james
한 다음에 jack
올 때까지 모든 문자를 검색 합니다.
때문에 당신이 원하는 하나 jack.*james
또는james.*jack
따라서 명령 :
jack.*james|james.*jack
jack
와 하나james
이런 경우에,이 jack
두는 james
하나, 허용되지 않을 것이라고 jack
한 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
그것은 또한 첫째을 위해 설계 될 수있다 james
마지막으로 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).*$