我想将//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
答案 0 :(得分:2)
这是不带正则表达式但功能强大的另一种变体。我不了解它的性能,但是我很乐于编写它,而且看起来不太神秘。
const newString = '//some/other/url/here///'
.split('/')
.filter(s => s)
.join('/')
编辑:
只需运行一些性能测试,这比正则表达式要慢,但是如果谨慎使用,它可能并不重要。
答案 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];