슬래시없이 문자열 반환


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.