JavaScript 문자열에서 슬래시를 전역 적으로 바꾸는 방법은 무엇입니까?


130

JavaScript 문자열에서 슬래시를 전역 적으로 바꾸는 방법은 무엇입니까?

답변:


256

다음은 수행하지만 한 번만 대체합니다.

"string".replace('/', 'ForwardSlash');

전역 대체의 경우 또는 정규식을 선호하는 경우 슬래시를 이스케이프하면됩니다.

"string".replace(/\//g, 'ForwardSlash');

3
첫 번째 스 니펫은 전역 대체를 수행하지 않습니다. 정규식이 아닌 방식으로 전역 교체를 수행하는 방법을 잘 모르겠습니다.
BoltClock

아 맞다, 슬래시 이상으로 시도하지 않았다. 그것은 함께 할 수 "string".replace('/', 'ForwardSlash', 'g')있지만 Firefox afaik에서만 작동하는 비표준 인수입니다.
Seldaek 2010

1
"string".replace(/\//g, 'ForwardSlash');작동하지만 이것에서 / g를 제거하면 작동하지 않습니다.
johntrepreneur

1
@johntrepreneur g는 전역 대체임을 나타냅니다. 즉, 일치하는 모든 인스턴스를 대체합니다 /. g 없이는 하나의 인스턴스 만 대체합니다. 그리고 제거 /g하면 마지막 /가 끝 구분 기호이기 때문에 정규식을 완전히 중단합니다.
Seldaek 2013 년

1
@RameshRajendran은 API가있는 그대로입니다. 기본적으로 한 번만 교체 한 다음 교체 할 항목을 찾으면 중지합니다. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek

27

g한정자 와 함께 정규식 리터럴을 사용 하고 구분 기호와 충돌하지 않도록 백 슬래시로 슬래시를 이스케이프합니다.

var str = 'some // slashes', replacement = '';
var replaced = str.replace(/\//g, replacement);

7

정규식을 사용하지 않고 (검색 문자열이 사용자 입력 인 경우에만이 작업을 수행하지만) :

var str = 'Hello/ world/ this has two slashes!';
alert(str.split('/').join(',')); // alerts 'Hello, world, this has two slashes!' 

4

이것이 당신이 원하는 것입니까?

'string with / in it'.replace(/\//g, '\\');

4

이것은 "//"단지 "/".

str.replace(/\/\//g, '/');

2

크로스 브라우저 문제 또는 주석 처리를 방지하려면 슬래시를 래핑해야합니다.

str = 'this/that and/if';

var newstr = str.replace(/[/]/g, 'ForwardSlash');

1

안녕하세요. 위 스크립트에서 약간의 수정이 있습니다. 위 스크립트는 출력을 표시 할 때 첫 번째 문자를 건너 뜁니다.

function stripSlashes(x)
{
var y = "";
for(i = 0; i < x.length; i++)
{
    if(x.charAt(i) == "/")
    {
        y += "";
    }
    else
    {
        y+= x.charAt(i);
    }
}
return y;   
}

0
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
   str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"

제안 된 정규식 /\//g은 나를 위해 작동하지 않았습니다. 나머지 줄 ( //g, replacement);)은 주석 처리되었습니다.


1
이 성능이 제안 된 어레이 분할 / 조인 솔루션과 어떻게 비교되는지 확실하지 않습니다.
Christopher Lincoln

...이 문제를 발견했습니다 ... 더 똑똑한 구문 강조를 사용하여 다른 IDE를 사용해보십시오. 코드 편집기의 색상에 의존하지 말고 런타임에 코드를 적절히 토큰 화하는 상태 저장 파서의 힘을 믿으십시오.
soletan

0

이것은 Christopher Lincolns 아이디어이지만 올바른 코드입니다.

function replace(str,find,replace){
    if (find != ""){
        str = str.toString();
        var aStr = str.split(find);
        for(var i = 0; i < aStr.length; i++) {
            if (i > 0){
                str = str + replace + aStr[i];
            }else{
                str = aStr[i];
            }
        }
    }
    return str;
}

사용 예 :

var somevariable = replace('//\\\/\/sdfas/\/\/\\\////','\/sdf','replacethis\');

자바 스크립트 전역 문자열 교체는 불필요하게 복잡합니다. 이 기능은 그 문제를 해결합니다. 성능에 약간의 영향이있을 수 있지만 무시할 만하다고 확신합니다.

다음은 대체 기능으로 훨씬 깔끔해 보이지만 위의 기능보다 평균적으로 약 25 ~ 20 % 느립니다.

function replace(str,find,replace){
    if (find !== ""){
        str = str.toString().split(find).join(replace);
    }
    return str;
}

-1

RegExp좀 더 읽기 쉽게 만들기 위해 개체를 만들 수 있습니다.

str.replace(new RegExp('/'), 'foobar');

모두 교체하려면 "g"플래그를 추가하십시오.

str.replace(new RegExp('/', 'g'), 'foobar');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.