javascript 정규표현식 활용해서 replace할 때 특정 문자가 포함되면 replace되지 않도록하려면 어떻게 해야하나요?
조회수 595회
String.replace(/case/gi, "FIND!")
위처럼 대소문자를 구분하지 않고 case
라는 문자열을 FIND!
로 바꾸라고 작성했는데,
만약 case
양 옆에 >
과 <
두 개의 문자열이 존재할 때는 replace하지 않도록 하려면 어떻게 작성해야하나요?
예를 들어 문장중 case
는 FIND!
로 바뀌게하지만,<tag>case</tag>
과 같이 ><
으로 감싸져있는 case
는 replace 되지 않도록 하고싶습니다.
1 답변
-
구체적인 경우의 수를 한정해서 원하시는 정규표현식을 찾아야 할 거 같네요. 문제의 본질이 '태그로 감싸진 텍스트는 제외'이기 때문에, 운이 나쁘면 훨씬 더 복잡해질 수 있습니다.
제일 편리한 사례를 생각해 보자면, 아래 정규표현식은
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));
이것저것 조사하여 응용해 보세요.
댓글 입력