javascript 정규표현식 활용해서 replace할 때 특정 문자가 포함되면 replace되지 않도록하려면 어떻게 해야하나요?

조회수 594회
String.replace(/case/gi, "FIND!")

위처럼 대소문자를 구분하지 않고 case라는 문자열을 FIND! 로 바꾸라고 작성했는데,
만약 case양 옆에 >< 두 개의 문자열이 존재할 때는 replace하지 않도록 하려면 어떻게 작성해야하나요?

예를 들어 문장중 caseFIND!로 바뀌게하지만,<tag>case</tag>과 같이 ><으로 감싸져있는 case는 replace 되지 않도록 하고싶습니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    구체적인 경우의 수를 한정해서 원하시는 정규표현식을 찾아야 할 거 같네요. 문제의 본질이 '태그로 감싸진 텍스트는 제외'이기 때문에, 운이 나쁘면 훨씬 더 복잡해질 수 있습니다.

    제일 편리한 사례를 생각해 보자면, 아래 정규표현식은 case라는 문자열 앞뒤로 붙은 >, <가 아닌 문자를 1개씩 캡쳐하여, FIND!의 앞뒤로 다시 붙입니다. 핵심은 [^abc] 구문입니다.

    const regex = /(([^>])case([^<]))/gi;
    const subst = `$2FIND!$3`;
    
    const str = `<h3><span>Case</span> Closed</h3>
    <p>명탐정코난 시리즈는 영어권에서 "Case Closed"라고 부른다는 모양이다.</p>`;
    console.log(str.replace(regex, subst));
    

    이것저것 조사하여 응용해 보세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)