返回字符串,不带斜杠


196

我有两个变量:

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

我该怎么做呢?


Answers:


476

试试这个:

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

122
要处理带有多个斜杠的情况,您可以使用:return site.replace(/\/+$/, "");
mikermcneil 2012年

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

47

ES6 / ES2015提供了一个API,用于询问字符串是否以某些字符结尾,从而可以编写更简洁,更易读的函数。

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

3
在2019年🤙最佳的解决方案
保罗·拉德

@PaulRad在使用此解决方案时,在单元测试中未出现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
我完全同意,无论何时编写正则表达式,都应将其包装在带有描述性名称或注释的函数中。
埃里克·拉巴索斯基

11

此代码段更准确:

str.replace(/^(.+?)\/*?$/, "$1");
  1. 它不会删除/字符串,因为它是有效的网址。
  2. 它将带多个斜杠的字符串剥离。

尽管这可能是删除多个斜杠的有效方法,但这不是OP的要求。
乔恩·

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

然后,它将在最后检查一个/,如果没有,则将其删除,否则将返回您的字符串

只是我无法评论的一件事@ThiefMaster哇,您不关心内存,您会为一个if跑一个substr吗?

修复了字符串中基于零的索引的计算。


2

这是一个小的url示例。

var currentUrl = location.href;

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

记录新网址

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 2011年

好吧,他的评论说他想删除尾随的斜线
ThiefMaster 2011年

@ThiefMaster:根据他的示例,我的代码可以做到。
josh.trow 2011年

1
这就是为什么在URL更改为“完全合格”的情况下,在任何时候都不使用它的方法,即http://不会起作用,并且与/中间的任何链接都不会对Google员工起作用
Barkermn01 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.