返回不带斜杠的字符串

我有两个变量:

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

我怎么做呢?

181806 次浏览
function stripTrailingSlash(str) {
if(str.substr(-1) === '/') {
return str.substr(0, str.length - 1);
}
return str;
}

注意:IE8及以上版本不支持负子str偏移量。如果你需要支持那些古老的浏览器,可以使用str.length - 1

function someFunction(site) {
if (site.indexOf('/') > 0)
return site.substring(0, site.indexOf('/'));
return site;
}

试试这个:

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

我会使用正则表达式:

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是一个字符串。

我所知道的最简单的方法是:

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,不能做任何编译器可以做的优化,它不会为你修复这个问题

这里有一个小的url示例。

var currentUrl = location.href;


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

记录新的url

console.log(currentUrl);

ES6 / ES2015提供了一个API,用于询问字符串是否以某个内容结尾,这使得编写一个更清晰、更可读的函数成为可能。

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

以下片段更为准确:

str.replace(/^(.+?)\/*?$/, "$1");
  1. 它不会剥离/字符串,因为它是一个有效的url。
  2. 它去掉带有多个尾随斜杠的字符串。

我知道这个问题是关于尾随斜杠,但我在搜索修剪斜杠(在字符串字面量的尾部和头部)时发现了这篇文章,因为人们需要这个解决方案,我在这里发布了一个:

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

更新:

正如注释中提到的@Stephen R,如果你想同时删除字符串字面量尾部和头部的斜杠和反斜杠,你可以这样写:

'\/\\/\/I am free\\///\\\\'.replace(/^[\\/]+|[\\/]+$/g, '') // returns 'I am free'
function stripTrailingSlash(text) {
return text
.split('/')
.filter(Boolean)
.join('/');
}

另一个解决方案。

根据@vdegenne的回答…如何脱衣:

单尾斜杠:

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

单个或连续的尾随斜杠:

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

单前导斜杠:

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

单线或连续的前导斜线:

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

单行斜杠和尾斜杠:

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

单个或连续的前导斜杠和尾斜杠:

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

要同时处理斜杠和__abc2斜杠,用[\\/]替换\/的实例

如果你正在使用URL,那么你可以使用内置的URL类

const url = new URL('https://foo.bar/');
console.log(url.toString()); // https://foo.bar