슬래시없이 문자열 반환


198

두 가지 변수가 있습니다.

site1 = "www.somesite.com";  
site2 = "www.somesite.com/";  

나는 이런 식으로하고 싶다

function someFunction(site)
{
    // If the var has a trailing slash (like site2), 
    // remove it and return the site without the trailing slash
    return no_trailing_slash_url;
}

어떻게해야합니까?


답변:


481

이 시도:

function someFunction(site)     
{     
    return site.replace(/\/$/, "");
} 

124
후행 슬래시가 여러 개인 경우를 처리하기 위해 다음을 사용할 수 있습니다.return site.replace(/\/+$/, "");
mikermcneil

13
"/".replace(/\/$/," ")는" "입니다. "/"는 유효한 경로이므로 제거해서는 안됩니다.
puchu

79
function stripTrailingSlash(str) {
    if(str.substr(-1) === '/') {
        return str.substr(0, str.length - 1);
    }
    return str;
}

참고 : IE8 및 이전 버전은 음의 substr 오프셋을 지원하지 않습니다. str.length - 1고대 브라우저를 지원해야하는 경우 대신 사용하십시오 .


여기서 '고대'라는 용어를 사용하는 것과 같습니다.
PageSource

48

ES6 / ES2015는 문자열이 무언가로 끝나는 지 묻는 API를 제공하여보다 깔끔하고 읽기 쉬운 기능을 작성할 수 있습니다.

const stripTrailingSlash = (str) => {
    return str.endsWith('/') ?
        str.slice(0, -1) :
        str;
};

3
🤙 2019에서 최적의 솔루션
폴 래드

@PaulRad이 솔른을 사용하는 동안 단위 테스트에서 str.slice (0, -1) 브랜치 문제가이 줄에 포함되지 않습니다. 어떻게 고쳐?
비제이 라이

1
@BijayRai는 테스트 str에서 /슬래시 로 끝나는 경우가 누락되었음을 의미합니다 . 두 개의 어설 션 (또는 두 개의 테스트)이 있어야합니다. 하나는 슬래시가 있고 다른 하나는없는 것입니다.
Seth Holladay

30

정규식을 사용합니다.

function someFunction(site)
{
// if site has an end slash (like: www.example.com/),
// then remove it and return the site without the end slash
return site.replace(/\/$/, '') // Match a forward slash / at the end of the string ($)
}

site그러나 변수 가 문자열 인지 확인하고 싶을 것 입니다.


3
나는 정규 표현식을 작성할 때마다 설명적인 이름이나 주석이있는 함수로 싸야한다는 것에 전적으로 동의합니다.
Eric Labashosky

12

이 스 니펫이 더 정확합니다.

str.replace(/^(.+?)\/*?$/, "$1");
  1. /유효한 URL이므로 문자열을 제거하지 않습니다 .
  2. 후행 슬래시가 여러 개인 문자열을 제거합니다.

이 방법은 여러 개의 슬래시를 제거하는 올바른 방법 일 수 있지만 OP의 요청은 아닙니다.
Jon L.

@JonL. 많은 사람들이 스택 오버플로를 탐색하여 답을 찾습니다. 이 답변이 허용되는 답변보다 도움이된다고 생각합니다.
Ronnel Martinez

@JonL. 많은 사람들이 스택 오버플로를 탐색하여 답을 찾습니다. 이 답변이 허용되는 답변보다 도움이된다고 생각합니다.
Ronnel Martinez

11

나는 슬래시 후행에 관한 질문을 알고 있지만 사람들 이이 솔루션을 필요로하기 때문에 슬래시 트리밍 (문자열 리터럴의 꼬리와 머리 모두)을 검색하는 동안이 게시물을 찾았습니다.

'///I am free///'.replace(/^\/+|\/+$/g, ''); // returns 'I am free'

최신 정보 :

@Stephen R이 코멘트에 언급 둘 다 슬래시와 꼬리와 문자열 리터럴의 머리에 백 슬래시를 모두 제거하려면, 당신은 작성합니다 :

'\/\\/\/I am free\\///\\\\'.replace(/^[\\/]+|[\\/]+$/g, '') // returns 'I am free'

이것이 실제 답변입니다!
PERK can

2
슬래시와 백 슬래시를 모두 트리밍하려면.replace(/^[\\/]+|[\\/]+$/g, '')
Stephen R

3

@vdegenne의 답변을 바탕으로 ... 제거하는 방법 :

단일 후행 슬래시 :

theString.replace(/\/$/, '');

단일 또는 연속 후행 슬래시 :

theString.replace(/\/+$/g, '');

단일 선행 슬래시 :

theString.replace(/^\//, '');

단일 또는 연속 선행 슬래시 :

theString.replace(/^\/+/g, '');

단일 선행 및 후행 슬래시 :

theString.replace(/^\/|\/$/g, '')

단일 또는 연속 선행 및 후행 슬래시 :

theString.replace(/^\/+|\/+$/g, '')

모두 슬래시 및 처리하기 위해 다시 슬래시의 인스턴스 교체 \/로를[\\/]


2

내가 아는 쉬운 방법은 이것입니다

function stipTrailingSlash(str){
   if(srt.charAt(str.length-1) == "/"){ str = str.substr(0, str.length - 1);}
   return str
}

그런 다음 끝에 /를 확인하고 문자열이 원래대로 반환되지 않으면 제거합니다.

내가 아직 언급 할 수없는 한 가지 @ThiefMaster 와우 당신은 메모리에 대해 신경 쓰지 않아도됩니다.

문자열에서 0부터 시작하는 인덱스에 대한 calucation을 수정했습니다.


2

여기 작은 URL 예제가 있습니다.

var currentUrl = location.href;

if(currentUrl.substr(-1) == '/') {
    currentUrl = currentUrl.substr(0, currentUrl.length - 1);
}

새 URL을 기록

console.log(currentUrl);

1
function stripTrailingSlash(text) {
    return text
        .split('/')
        .filter(Boolean)
        .join('/');
}

다른 해결책.


-11
function someFunction(site) {
  if (site.indexOf('/') > 0)
    return site.substring(0, site.indexOf('/'));
  return site;
}

2
subtring? 그 외에도 첫 번째 슬래시와 그 이후의 모든 것을 제거합니다.
ThiefMaster

@ThiefMaster : 정말요? 내가 의미한다고 말할 수 substring없습니까? 또한 네, 첫 번째 슬래시와 그 이후의 모든 것을 제거하려고했습니다.
josh.trow

그의 의견은 그가 슬래시를 제거하고 싶다고 말합니다
ThiefMaster

@ThiefMaster : 그의 예제에 따르면 내 코드는 수행합니다.
josh.trow

1
//이 실 거예요 작업과 중간 실 거예요 작업에서 / 어떤 링크 : URL이있는 HTTP "완전한"로 변경하면 그냥 이유를 어느 시점에서이 기능을 사용하지 않을 수 없습니다 Google 직원
Barkermn01
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.