如何删除字符串的第一个和最后一个字符

236

我想知道如何在Javascript中删掉字符串的第一个和最后一个字符。

我的URL显示为/installers/,我只需要installers

有时它会是/installers/services/,我只需要installers/services

因此,我不能简单地删除斜杠/


1
我只想去掉那个字符串的第一个和最后一个字符。我只是获取URL。 - Peanut
2
我只是想知道为什么似乎没有人注意到修剪斜杠(如文本所示)和无条件地删除字符串的第一个和最后一个字符(如标题所示)并不完全相同。但这解释了下面各种答案的广泛性。 - JensG
10个回答

494

这里是你需要的内容

var yourString = "/installers/";
var result = yourString.substring(1, yourString.length-1);

console.log(result);

或者,您可以像Ankit Gupta建议的那样使用.slice

var yourString = "/installers/services/";

var result = yourString.slice(1,-1);

console.log(result);

有关slicesubstring的文档。


7
但如果URL结尾没有斜杠,则会减少1个字符。 - Martijn
9
@Martijn,这完全回答了问题。 没有人说您不想剥离除斜杠以外的任何内容;)。+1 我同意 - 代码应该表达其预期的功能,而不是像正则表达式示例那样。 - Episodex
2
但是,如果您要移动到另一台服务器,则可能没有尾部斜线(或者您可能有目的地配置更改)。不是在点赞,只是指出这一点 :) - Martijn
1
尾随斜线总会存在,因为它指向index.php文件... - Peanut

178

可以使用slice更好的方式:

string.slice(1, -1)

23

我认为jQuery与此无关。无论如何,请尝试以下操作:

url = url.replace(/^\/|\/$/g, '');

4
到目前为止,这似乎是最正确的。唯一的问题是,我会添加一个量词,以防万一:/^\/+|\/+$/g - georg

12

如果您的字符串没有始终包含斜杠,您可以使用正则表达式来解决。虽然正则表达式比简单的替换/切片要慢,但它具有更多的逻辑空间:

"/installers/services/".replace(/^\/?|\/?$/g, "") 

# /installers/services/ -> installers/services
# /installers/services -> installers/services
# installers/services/ -> installers/services

正则表达式解释:

  • ['以...开始' ^] + [可选项?] + [斜杠]: ^/?,转义 -> ^\/?
  • 管道符 ( | ) 可以读作
  • ['以...结束' $] + [可选项?] + [斜杠] -> /?$,转义 -> \/?$

合并后是 ^\/?|\/?$,不需要转义。可选的第一个斜杠或可选的最后一个斜杠。
严格来说不是“可选项”,而是“出现零次或一次”。


1
问题是,我不能去掉“/”,因为有时我需要它们来分隔URL的内部部分。 - Peanut
1
内部斜杠不会消失。我将编辑并解释正则表达式。 - Martijn
4
我认为你需要使用全局标志才能使其正常工作:"/installers/services/"。replace(/ ^ \ /?| \ /?$ / g,“”) - Matt Gaunt

4
你可以这样做:
"/installers/services/".replace(/^\/+/g,'').replace(/\/+$/g,'')

这个正则表达式是许多语言中使用的trim函数相同行为的常见方法。
trim函数的一个可能实现如下:
function trim(string, char){
    if(!char) char = ' '; //space by default
    char = char.replace(/([()[{*+.$^\\|?])/g, '\\$1'); //escape char parameter if needed for regex syntax.
    var regex_1 = new RegExp("^" + char + "+", "g");
    var regex_2 = new RegExp(char + "+$", "g");
    return string.replace(regex_1, '').replace(regex_2, '');
}

这段代码将删除字符串开头和结尾处所有的 / 符号。它还能处理像 ///installers/services/// 这样的情况。

您也可以简单地执行以下操作:

"/installers/".substring(1, string.length-1);

4
你可以使用 substring 方法。
s = s.substring(0, s.length - 1) //removes last character

另一种选择是使用 slice 方法。

4
使用 string.slice(1, 0) 去除字符串的第一个字符
使用 string.slice(0, -1) 去除字符串的最后一个字符

2
使用.replace(/.*\/(\S+)\//img,"$1")
"/installers/services/".replace(/.*\/(\S+)\//img,"$1"); //--> services

"/services/".replace(/.*\/(\S+)\//img,"$1"); //--> services

这并不是 OP 所要求的。 - Emile Bergeron

0

这是一个非常好的短代码。

response.data.slice(1,-1) // "Prince"

-> Prince

-3

尝试:

url=url.substring(1,url.length-1);

你可以使用目录,例如 .../.../.../... 等。


4
"url.length" 应翻译为 "url长度",而不是 "url.Length"。 - Arthur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接