253

我有两个变量:

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'

更新

正如评论中提到的@Stephen R,如果您想同时删除字符串文字的尾部和头部的斜杠和反斜杠,您可以编写:

'\/\\/\/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

这是一个小 url 示例。

var currentUrl = location.href;

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

记录新的网址

console.log(currentUrl);
于 2014-11-28T11:52:41.690 回答
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;

然后这将检查最后是否有 / ,如果它在那里,请将其删除。如果不是,它将按原样返回您的字符串。

修复了字符串上从零开始的索引的计算。

编辑: 由于对一个响应有评论,现在有更多的人在做同样的事情,不要使用子字符串进行比较,当您可以使用时,您正在内存中创建一个全新的字符串(在低级别charAt)单个字符进行比较的内存要少得多,Javascript 仍然是 JIT 并且无法对编译器可以的任何语言进行优化,它不会为您解决这个问题。

于 2011-07-13T15:03:27.530 回答
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 回答