JavaScript正则表达式:删除第一个和最后一个斜杠


79

我在javascript中有这些字符串:

/banking/bonifici/italia
/banking/bonifici/italia/

并且我想删除第一个和最后一个斜杠(如果存在)。

我试过了,^\/(.+)\/?$但是没有用。

阅读stackoverflow中的一些文章后,我发现php具有修整功能,可以使用他的javascript翻译(http://phpjs.org/functions/trim:566),但我希望使用“简单”的正则表达式。


Answers:


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

“用空字符串替换所有(/.../g)前斜杠(^\/)或(|)后斜杠(\/$)。”


18
我修改了它以使用“ +”删除任何数量的前斜杠或后斜杠:replace(/ ^ \ / + | \ / + $ / g,)
rickumali 2013年

如果字符串是//www.google.com什么?//将被错过。
艾萨克·费雷拉

@IsaacFerreira,您可以使用/^\s*\/*\s*|\s*\/*\s*$/gm它来处理斜线和多个斜线前后的一些可能的空格,并添加*
benraay

35

没有真正的理由在这里使用正则表达式,字符串函数可以正常工作:

var string = "/banking/bonifici/italia/";
if (string.charAt(0) == "/") string = string.substr(1);
if (string.charAt(string.length - 1) == "/") string = string.substr(0, string.length - 1);
// string => "banking/bonifici/italia"

jsFiddle上查看此操作。

参考文献:


3
我认为有时避免使用regexp将有助于提高可读性,但是在这种情况下,使用1行regexp和1行注释实际上将以一种更为优雅的方式完成这项工作。
kroe 2013年

3
这不会删除字符串的开头或结尾的重复斜杠(“ // banking / bon / ita //”),例如replace(/ ^ \ / + | \ / + $ / g,'')的正则表达式。
diamondsea

我什至认为它甚至没有帮助提高可读性,它只是对某人能否理解正则表达式的一种检验。我认为大多数人可以在几秒钟后知道/ ^ \ / | \ / $ / g的功能,尤其是在其他非正则表达式代码的情况下。因此,在这种情况下,正则表达式是更好的IMO。
William

7

如果不是使用RegExp ,或者在使用URL(例如,双/三斜杠或没有复杂替换的空行)或使用其他处理时不得不处理一些极端情况,则这似乎不太明显,但功能更强大-样式解决方案:

const urls = [
  '//some/link///to/the/resource/',
  '/root',
  '/something/else',
];

const trimmedUrls = urls.map(url => url.split('/').filter(x => x).join('/'));

console.log(trimmedUrls);

在此代码段中,filter()函数可以实现比仅过滤空字符串(这是默认行为)更复杂的逻辑。

警告词-这不像这里的其他摘要那么快。


3

万一有人需要过早的优化...

http://jsperf.com/remove-leading-and-trailing-slashes/5

var path = '///foo/is/not/equal/to/bar///'
var count = path.length - 1
var index = 0

while (path.charCodeAt(index) === 47 && ++index);
while (path.charCodeAt(count) === 47 && --count);

path = path.slice(index, count + 1)

@benraay您需要帮助来了解它吗?
Milen Georgiev

@MilenGeorgiev不,谢谢,我只是说这段代码的可读性不如使用RegEx的版本,它们有时很难理解,但theString.replace(/^\/|\/$/g, '')对于阅读代码的人来说确实很容易理解,但可能比此版本慢!
benraay
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.