IT박스

replace를 사용할 때 Javascript가 첫 번째 인스턴스 만 대체하는 이유는 무엇입니까?

itboxs 2020. 6. 28. 19:22
반응형

replace를 사용할 때 Javascript가 첫 번째 인스턴스 만 대체하는 이유는 무엇입니까?


나는 이것을 가지고있다

 var date = $('#Date').val();

이것은 텍스트 상자에 다음과 같은 값을 얻습니다.

2009 년 12 월 31 일

이제 나는 이것에

var id = 'c_' + date.replace("/", '');

결과는

c_1231 / 2009

나는 왜 그런지 이해하지 못하는 마지막 '/'를 그리워합니다.


전역 적으로 바꾸 려면 g 플래그 를 설정해야합니다 .

date.replace(new RegExp("/", "g"), '')
// or
date.replace(/\//g, '')

그렇지 않으면 첫 번째 항목 만 교체됩니다.


C # /. NET 클래스 라이브러리 (및 대부분의 다른 합리적인 언어)와 달리, String문자열 대 일치 인수를 string.replace메소드에 전달할 때는 문자열 대체를 수행하지 않습니다. 문자열을 a로 변환하고 RegExp정규식 대체를 수행합니다. Gumbo가 설명 하듯이 정규식 대체에는 g모든 일치 항목을 한 번에 바꾸려면 기본적으로 켜져 있지 않은 slobal 플래그 가 필요합니다 .

예를 들어 match-string이 동적이고 regexen에서 특별한 의미를 가진 문자를 포함 할 수 있기 때문에 실제 문자열 기반 바꾸기를 원하는 경우 JavaScript 관용구는 다음과 같습니다.

var id= 'c_'+date.split('/').join('');

당신이 사용할 수있는:

String.prototype.replaceAll = function(search, replace) {
if (replace === undefined) {
    return this.toString();
}
return this.split(search).join(replace);
}

참고 URL : https://stackoverflow.com/questions/1967119/why-does-javascript-replace-only-first-instance-when-using-replace

반응형