정규식에 논리 AND가 필요합니다.
같은
잭 앤드 제임스
다음 문자열에 동의
-
‘ 여기 잭 은 제임스입니다 ‘
-
‘여 보세요 제임스 는 잭입니다 ‘
답변
lookarounds를 사용하여 점검 할 수 있습니다 .
^(?=.*\bjack\b)(?=.*\bjames\b).*$
이 방법은 여러 조건을 쉽게 지정할 수 있다는 장점이 있습니다.
^(?=.*\bjack\b)(?=.*\bjames\b)(?=.*\bjason\b)(?=.*\bjules\b).*$
답변
시험:
james.*jack
두 가지를 동시에 원하면 다음과 같이하십시오 or
.
james.*jack|jack.*james
답변
내가 쓸 명령에 대한 설명 :-
.
모든 문자, 숫자 대신 자리가 올 수 있음을 의미합니다.
*
바로 앞에 쓰여진 것 이상의 0을 의미합니다.
|
‘또는’을 의미합니다 .
그래서,
james.*jack
을 검색 james
한 다음에 jack
올 때까지 모든 문자를 검색 합니다.
때문에 당신이 원하는 하나 jack.*james
또는james.*jack
따라서 명령 :
jack.*james|james.*jack
답변
짧고 달콤한
(?=.*jack)(?=.*james)
답변
넌 할 수있어:
\bjack\b.*\bjames\b|\bjames\b.*\bjack\b
답변
Vim에는 지점 운영자가 있습니다 \&
어떤 순서로든 단어 집합을 포함하는 줄을 검색 할 때 유용한 를 있습니다. 또한 필요한 단어 세트를 확장하는 것은 쉽지 않습니다.
예를 들어
/.*jack\&.*james
및를 포함하는 행 jack
과 james
순서에 관계없이 일치합니다 .
사용법에 대한 자세한 내용 은 이 답변 을 참조하십시오 . 나는 분기를 구현하는 다른 정규식 맛을 모른다. 연산자는 정규식 위키 백과 항목 에도 문서화되어 있지 않습니다 .
답변
방법 1 : 하나 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)
정규식 데모 1
또한이를 단순화 할 수 있습니다.
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$
정규식 데모 2
표현식을 단순화 / 수정 / 탐색하려면 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}`);
});
}
방법 2 : 특정 순서로 jack
하나씩james
그것은 또한 첫째을 위해 설계 될 수있다 james
마지막으로 jack
, 하나를 다음과 같은 :
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b.*\bjack\b).*$
정규식 데모 3
그 반대:
^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjack\b.*\bjames\b).*$
정규식 데모 4
