Javascript修剪双斜杠

时间:2018-12-16 19:23:46

标签: javascript regex replace trim

我想将//a/url///修剪为a/url。关于Stackoverflow有一些问题,但它们无法正常工作,无法解决另一个问题,或者时间太长且太复杂。

以下代码正在运行,并且基于Javascript regular expression: remove first and last slash

function trimSlashes(str) {
  str = str.replace(/^\/|\/$/g, '');
  return str.replace(/^\/|\/$/g, '');
};

但是,重复这样的代码并不是很好。正则表达式看起来也要像双斜杠一样?

测试用例

let str1 = trimSlashes('/some/url/here/');
let str2 = trimSlashes('//some/other/url/here///');

预期结果

some/url/here
some/other/url/here

愿望清单

  • 只需一个正则表达式
  • 越快越好

3 个答案:

答案 0 :(得分:2)

这是不带正则表达式但功能强大的另一种变体。我不了解它的性能,但是我很乐于编写它,而且看起来不太神秘。

const newString = '//some/other/url/here///'
.split('/')
.filter(s => s)
.join('/')

编辑:

只需运行一些性能测试,这比正则表达式要慢,但是如果谨慎使用,它可能并不重要。

https://jsperf.com/regex-vs-functional/1

答案 1 :(得分:1)

replace(/^\/+|\/+$/g, '')是您要寻找的:

两个测试用例的结果:

> '/some/url/here/'.replace(/^\/+|\/+$/g, '');
"some/url/here"

> '//some/other/url/here///'.replace(/^\/+|\/+$/g, '');
"some/other/url/here"

解释:

^\/+  # one or more forward slashes at the beginning
|     # or
\/+$  # one or more forward slashes at the end

答案 2 :(得分:1)

使用正则表达式时,必须小心意外的匹配。例如,当文本为“ //,并且这是文本的某些行中的注释”时,是否要修剪斜线?

如果您不想缩减此类内容,则需要对正则表达式稍加注意,怎么办?

let regex = /^\/+([\w\/]+?)\/+$/;
let matches = regex.exec("//some/other/url/here///");
let url = matches[1];

https://regex101.com/r/K8CnxP/1