freezner

[JS] 중첩된 문자열 제거하는 방법

한 텍스트 구문에서 중첩되는 문자열을 제거하는 함수입니다.

예를 들어 “사과;;;바나나;;파인애플;배;;;포도;” 라는 문자열이 있을때 중복된 세미콜론을 제거하고 하나의 세미콜론만 가지게 하고 싶습니다. 즉, “사과;바나나;파인애플;배;포도;” 로 변환하고자 합니다.

이 때 흔히 아래와 같이 replace를 이용해 치환합니다.

var fruits = "사과;;;바나나;;파인애플;배;;;포도;";
fruits = fruits.replace(/;;/g, ";");

하지만 결과는 “사과;;바나나;파인애플;배;;포도;” 가 될 것입니다. replace가 한 번 더 실행되어야 원하는 결과를 얻을 수 있습니다. 중첩문자(세미콜론)이 3개 있을땐 2번, 4개 있을땐 3번 replace가 실행되어야 하는데 이 말의 의미는 반목문(loop)를 실행해야 한다는 것입니다.

중첩문자를 제거하기 위한 함수를 아래와 같이 만들어 봤습니다.

// 중첩 문자 제거
function rm_str_nesting(target_id, target_str, replace_str) {
  try
  {
    // 대소문자를 구분하지 않으려면 정규식 옵션에 g 대신 gi로 사용
    var exp = new RegExp(target_str, "g");
    var id = $("#" + target_id);

    do {
      id.val(id.val().replace(exp, replace_str));
    }
    while (id.val().indexOf(target_str) > -1);
  }
  catch (error) {
    return false;
  }
			
  return true;
}

 

이 함수의 사용 예는 다음과 같습니다.

<input type="text" id="fruits" value="사과;;;바나나;;파인애플;배;;;포도;" />

<script type="text/javascript">
// rm_str_nesting([문자열이 있는 대상 input 박스의 ID], [대상 중첩 문자열], [치환할 문자열])
rm_str_nesting(fruits, ";;", ";");
</script>

* 참고로 함수 내용안에 jQuery 셀렉터가 사용되고 있기 때문에 jQuery 라이브러리가 필요합니다.

Exit mobile version