253

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

どうすればよいですか?

4

11 に答える 11

578

これを試して:

function someFunction(site)     
{     
    return site.replace(/\/$/, "");
} 
于 2011-07-13T14:52:37.667 に答える
86
function stripTrailingSlash(str) {
    if(str.substr(-1) === '/') {
        return str.substr(0, str.length - 1);
    }
    return str;
}

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

于 2011-07-13T14:51:35.807 に答える
80

ES6 / ES2015は、文字列が何かで終わっているかどうかを尋ねるためのAPIを提供します。これにより、よりクリーンで読みやすい関数を記述できます。

const stripTrailingSlash = (str) => {
    return str.endsWith('/') ?
        str.slice(0, -1) :
        str;
};
于 2016-03-27T00:57:00.800 に答える
31

正規表現を使用します:

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

于 2011-07-13T14:58:14.380 に答える
18

@vdegenneの答えに基づいて...ストリップする方法:

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

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

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

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

一重スラッシュ:

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

単一または連続する先頭のスラッシュ:

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

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

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

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

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

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

于 2019-09-20T17:23:44.383 に答える
17

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

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

更新

コメントで@StephenRが述べたように、文字列リテラルの末尾と先頭の両方でスラッシュとバックスラッシュの両方を削除する場合は、次のように記述します。

'\/\\/\/I am free\\///\\\\'.replace(/^[\\/]+|[\\/]+$/g, '') // returns 'I am free'
于 2018-05-25T11:17:23.593 に答える
12

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

str.replace(/^(.+?)\/*?$/, "$1");
  1. /有効なURLであるため、文字列は削除されません。
  2. 複数の末尾のスラッシュが付いた文字列を削除します。
于 2017-08-17T14:20:48.810 に答える
2

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

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

ES2015バージョンを更新します。

const stripTrailingSlash = str=>str.charAt(str.length-1)=="/"?str.substr(0,str.length-1):str;

これにより、最後に/がチェックされ、そこにある場合は削除されます。そうでない場合は、文字列がそのまま返されます。

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

編集: 1つの応答へのコメントがあったので、比較のためにサブ文字列を使用しないで同じことを行うことが多くcharAtなりました。単一の文字列で比較を行うためのメモリが大幅に少なくなります。Javascriptは依然としてJITであり、コンパイラが実行できるレベルまで最適化を実行できません。これは修正されません。

于 2011-07-13T15:03:27.530 に答える
2

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

var currentUrl = location.href;

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

新しいURLをログに記録する

console.log(currentUrl);
于 2014-11-28T11:52:41.690 に答える
2
function stripTrailingSlash(text) {
    return text
        .split('/')
        .filter(Boolean)
        .join('/');
}

別の解決策。

于 2019-08-16T03:03:47.727 に答える
-12
function someFunction(site) {
  if (site.indexOf('/') > 0)
    return site.substring(0, site.indexOf('/'));
  return site;
}
于 2011-07-13T14:52:34.483 に答える