source

임의의 순서로 두 개의 이름을 포함하는 문자열과 일치하도록 정규 표현

ittop 2023. 4. 12. 22:59
반응형

임의의 순서로 두 개의 이름을 포함하는 문자열과 일치하도록 정규 표현

논리적이고 논리적인 AND가 필요해

비슷한 것

잭과 제임스

다음 조건에 동의하다

  • '안녕 잭, 제임스입니다'

  • '안녕 제임스입니다 입니다'

긍정적인 룩어헤드를 사용하여 체크할 수 있습니다.다음은 필수불가결한 regular-expressions.info의 요약입니다.

미리 보기 및 뒤보기(전체적으로 "찾기"라고 함)는 길이가 0인 어설션입니다.lookaround는 실제로는 문자와 일치하지만 그 후 일치를 포기하고 match 또는 no match 결과만 반환합니다.그것이 그들이 "주장"이라고 불리는 이유이다.문자열 내의 문자를 소비하지 않고 일치 가능 여부만 판단합니다.

그런 다음 이어지는 내용이 일치하는 표현에 있는 문자를 사용하지 않고 특정 표현과 일치한다고 주장하기 위해 긍정적인 룩어헤드가 사용된다는 것을 설명합니다.

두 개의 포스트 해서 이 가 일치한다고 입니다.jack ★★★★★★★★★★★★★★★★★」james이치노

^(?=.*\bjack\b)(?=.*\bjames\b).*$

시험해 보세요.

안에 있는 은 '아까보다'로 입니다.?=긍정적인 외모입니다.패턴을 분석하겠습니다.

  1. ^는 대조하는 식의 시작을 단언합니다.
  2. (?=.*\bjack\b)이 일치해야 첫 입니다..*\bjack\b.
  3. .*0으로 하다
  4. \b는 임의의 단어 경계(공백, 표현의 시작, 표현의 끝 등)를 의미합니다.
  5. jack네말 로 정렬하다).james다음 긍정적인 전망에서)
  6. $나에게 그 표현의 끝이 일치한다고 단언한다.

첫 에 '로 이어지는 것 )'은 0 그 뒤에 , 그 에 '뒤로 보는 것'으로 그것 자체가 룩어헤드 또는 룩어바운드는 제로 이상의 문자로 시작하는 식이어야 합니다.리리음음음음음음음음음음음음음jack 또 경계와 두 하고 그 경계 뒤에 ' 문장이든 좋다'는. "다음은 0 이상의 문자로 시작하는 식이어야 하며, 그 다음에 단어 경계로 이어지는 식이어야 합니다.james먹다, '먹다'두 명의 룩어헤드 이후에.*은 단순히 하며 "0"은 "0"과 "0"은 "0"과 일치합니다.$을 사용하다

하고 그 에 잭, , 그 으로도 끝낸다'는 것은 '아무것이나'라는 개 있기 에 첫 시킵니다. 왜냐하면 단어 뒤에 많은 문자가 있기 때문입니다.jack 두 번째 에 두 jack 꼭 필요한 것은 ,, 두, 두, 두, 두, 두, ,, ), ), ), ), ), ), ), ), ), ), ), ), ), ), ), ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,james하지 않기 에, 「예측」은 「예측」으로 되어 있습니다.* 뒤에 것은 '.'와을 넘어설 수 .

감이 잡히셨겠지만, 확실히 말씀드리자면, 여기 있는 건jack ★★★★★★★★★★★★★★★★★」james즉 "하고 그 잭으로 그 것으로 끝납니다."라는개에 첫 이 충족됩니다.james 두 번째 에 두 james 꼭 필요한 것은 ,, 두, 두, 두, 두, 두, ,, ), ), ), ), ), ), ), ), ), ), ), ), ), ), ), ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,jack 어느 하지 않기 에, 「어느 쪽도 끝」, 「어느 쪽도 끝」, 「어느 쪽도 끝」, 「어느 쪽도 끝」이 되지 않습니다.* 뒤에 것은 '.'와을 넘어설 수 .

이 방법에는 여러 조건을 쉽게 지정할 수 있다는 장점이 있습니다.

^(?=.*\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)

테스트 케이스:

[
  "xxx james xxx jack xxx",
  "jack xxx james ",
  "jack xxx jam ",
  "  jam and jack",
  "jack",
  "james",
]
.forEach(s => console.log(/(?=.*james)(?=.*jack)/.test(s)) )

다음 작업을 수행할 수 있습니다.

\bjack\b.*\bjames\b|\bjames\b.*\bjack\b

이 대답의 표현은 사람을 위해 그렇게 한다.jack 1개의 ★★★★★★★★★★★★★★.james순서를 불문하고

여기서는 다른 시나리오를 살펴보겠습니다.

1:1 법 11:1jack 하나james

을 위해, 2개의 ★★★★★★★★★★★★★★★★★★★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)

RegEx 데모 1

또, 이하에 대해서도 간단하게 할 수 있습니다.

^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b|.*\bjack\b).*$

RegEx 데모 2


표현식을 단순화/업데이트/삭제하려면 regex101.com의 오른쪽 상단 패널에 설명되어 있습니다.관심 있는 경우 일치하는 단계를 보거나 이 디버거 링크에서 수정할 수 있습니다.디버거는 RegEx 엔진이 몇 가지 샘플 입력 문자열을 단계적으로 소비하고 일치 프로세스를 수행하는 방법을 보여줍니다.


RegEx 회선

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:1 법 22:1jack 하나james

은 첫 a에 할 수 있습니다.james a then then then thenjack 과 같이

^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjames\b.*\bjack\b).*$

RegEx 데모 3

그 반대도 마찬가지입니다.

^(?!.*\bjack\b.*\bjack\b|.*\bjames\b.*\bjames\b)(?=.*\bjack\b.*\bjames\b).*$

RegEx 데모 4

regex의 수량자 기능을 사용할 수 있습니다.lookaround는 항상 지원되지 않을 수 있습니다.

(\bjames\b){1,}.*(\bjack\b){1,}|(\bjack\b){1,}.*(\bjames\b){1,}

연산자 Vim이 .\&단어 집합을 포함하는 행을 임의의 순서로 검색할 때 유용합니다.또한, 필수 단어 집합을 확장하는 것은 사소한 일이다.

예를들면,

/.*jack\&.*james

경우, 이 합니다.jack ★★★★★★★★★★★★★★★★★」james

사용 방법에 대한 자세한 내용은 이 답변을 참조하십시오.분기를 구현하는 다른 regex 플레이버는 알 수 없습니다.오퍼레이터는 정규 표현 위키피디아 엔트리에 기재되어 있지 않습니다.

의 룩헤드가 필요하지 않으며, 하나의 서브스트링이 일반적으로 일치할 수 있습니다.

^(?=.*?\bjack\b).*?\bjames\b.*

regex101에서 이 데모를 참조하십시오.

룩어라운드는 길이가 제로인 어설션(조건)입니다.서의 예측은, 「 」를 합니다.^ 만약이라면 시작하다jack스트링의 후반부에서 발생하며 성공 시 최대james 나머지는 제거 가능.Lazydot은 단어 앞에 사용됩니다(에 포함됨).\b 단어 경계).대소문자를 무시하려면 -flag를 사용합니다.

언급URL : https://stackoverflow.com/questions/4389644/regex-to-match-string-containing-two-names-in-any-order

반응형