web-dev-qa-db-ja.com

末尾のスラッシュなしで文字列を返します

2つの変数があります。

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;
}

どうすればいいですか?

150
Ryan

これを試して:

function someFunction(site)     
{     
    return site.replace(/\/$/, "");
} 
409
Chandu
function stripTrailingSlash(str) {
    if(str.substr(-1) === '/') {
        return str.substr(0, str.length - 1);
    }
    return str;
}

注:IE8以前では、負のsubstrオフセットはサポートされていません。これらの古いブラウザをサポートする必要がある場合は、代わりにstr.length - 1を使用してください。

75
ThiefMaster

ES6/ES2015は、文字列が何かで終わるかどうかを確認するAPIを提供します。これにより、よりクリーンで読みやすい関数を作成できます。

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

正規表現を使用します。

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が文字列であることを確認する必要があります。

29
ChronosLLC

このスニペットはより正確です:

str.replace(/^(.+?)\/*?$/, "$1");
  1. 有効なURLであるため、/文字列は削除されません。
  2. 複数のスラッシュを含む文字列を削除します。
8
1ven

私は質問が後続のスラッシュに関するものであることを知っていますが、スラッシュのトリミング(ヘッドスラッシュとテールスラッシュの両方)を検索するときにこの投稿を見つけました。この投稿は私の問題を解決するのに役立ちましたので、ここで両方のスラッシュをトリミングする方法文字列の開始と終了:

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

ここに小さなURLの例を示します。

var currentUrl = location.href;

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

新しいURLを記録する

console.log(currentUrl);
2
DevJ3rry

私が知っている簡単な方法はこれです

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

これは、最後に/をチェックし、存在する場合は削除し、存在しない場合は文字列を返します

@ThiefMasterにコメントできないことの1つだけです。メモリを気にしないでください。

文字列のゼロベースのインデックスの計算を修正しました。

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

別のソリューション。

1
Доширак