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

时间:2010-10-01 15:25:56

标签: javascript regex

我在javascript中有这些字符串:

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

如果它存在,我想删除第一个和最后一个斜杠。

我尝试了^\/(.+)\/?$,但它不起作用。

在stackoverflow中阅读一些帖子我发现php有修剪功能,我可以使用他的javascript翻译(http://phpjs.org/functions/trim:566)但我更喜欢“简单”的正则表达式。

5 个答案:

答案 0 :(得分:155)

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

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

答案 1 :(得分:29)

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

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上查看此操作。

参考文献:

答案 2 :(得分:5)

如果使用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 :(得分: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)

答案 4 :(得分:0)

你可以检查 str.startsWith 和 str.endsWith 如果存在则 substr

  var str= "/aaa/bbb/;
  var str= str.startsWith('/') ? str.substr(1) : str;
  var str= str.endsWith('/') ? str.substr(0,str.length - 1) : str;

或者你可以编写自定义函数

trimSlashes('/aaa/bbb/');

function trimSlashes(str){
  str= str.startsWith('/') ? str.substr(1) : str;
  str= str.endsWith('/') ? str.substr(0,str.length - 1) : str;
  return str;
}