末尾にスラッシュを付けずに文字列を返す


196

私には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;
}

どうすればよいですか?


回答:


478

これを試して:

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

122
複数の末尾のスラッシュ付きのケースを処理するには、使用することができますreturn site.replace(/\/+$/, "");
mikermcneil

13
"/".replace(/\/$/、" ")は" "になります。「/」は有効なパスであり、削除しないでください。
ぷちゅ

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このsolnの使用中に、str.slice(0、-1)ブランチの問題がユニットテストのこの行でカバーされていません。それを修正するには?
Bijay Rai

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、2015年

12

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

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

これは複数のスラッシュを削除する有効な方法かもしれませんが、それはOPの要求ではありません。
Jon L.

@JonL。多くの人がスタックオーバーフローを参照して答えを見つけます。この回答は、承認された回答よりも役立ちます。
Ronnel Martinez

@JonL。多くの人がスタックオーバーフローを参照して答えを見つけます。この回答は、承認された回答よりも役立ちます。
Ronnel Martinez

10

質問は末尾のスラッシュに関するものですが、トリミングスラッシュ(文字列リテラルの末尾と先頭の両方)を検索しているときにこの投稿を見つけました。

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

更新

@Stephen Rは、コメントに記載された両方のテールと文字列リテラルの先頭にスラッシュとバックスラッシュの両方を削除したい場合は、次のように記述します。

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

これが本当の答えです!
缶PERK

1
スラッシュとバックスラッシュの両方をトリミングする場合:.replace(/^[\\/]+|[\\/]+$/g, '')
Stephen R

2

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

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

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

私がまだコメントできないことの1つだけ@ThiefMasterすごいあなたはメモリについて気にしないでくださいifだけのためにsubstrをrunnign笑しますか?

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


2

ここに小さなURLの例があります。

var currentUrl = location.href;

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

新しいURLを記録する

console.log(currentUrl);

2

@vdegenneの回答に基づいて...取り除く方法:

単一の末尾のスラッシュ:

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

単一または連続したスラッシュ:

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

単一の先行スラッシュ:

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

単一または連続した先行スラッシュ:

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

単一の先頭と末尾のスラッシュ:

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

単一または連続した先頭と末尾のスラッシュ:

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

スラッシュとバックスラッシュの両方を処理するには、のインスタンス\/[\\/]


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 2011

@ThiefMaster:本当に?あなたが私が意味したことを言うことができませんsubstringか?また、はい、私は最初のスラッシュとそれ以降のすべてを削除するつもりでした。それは、投稿された質問とサンプルデータの請求書を埋めるためです。
josh.trow

まあ彼のコメントは、末尾のスラッシュを削除したいと言っています
ThiefMaster

@ThiefMaster:彼の例によれば、これは私のコードが行います。
josh.trow

1
URLが「完全修飾」に変更された場合にこれをいつでも使用しないようにしてください。http://これは機能せず、途中の/とのリンクはGoogleで
Barkermn01
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.