我在javascript中有这些字符串:
/banking/bonifici/italia
/banking/bonifici/italia/
并且我想删除第一个和最后一个斜杠(如果存在)。
我试过了,^\/(.+)\/?$
但是没有用。
阅读stackoverflow中的一些文章后,我发现php具有修整功能,可以使用他的javascript翻译(http://phpjs.org/functions/trim:566),但我希望使用“简单”的正则表达式。
我在javascript中有这些字符串:
/banking/bonifici/italia
/banking/bonifici/italia/
并且我想删除第一个和最后一个斜杠(如果存在)。
我试过了,^\/(.+)\/?$
但是没有用。
阅读stackoverflow中的一些文章后,我发现php具有修整功能,可以使用他的javascript翻译(http://phpjs.org/functions/trim:566),但我希望使用“简单”的正则表达式。
Answers:
return theString.replace(/^\/|\/$/g, '');
“用空字符串替换所有(/.../g
)前斜杠(^\/
)或(|
)后斜杠(\/$
)。”
//www.google.com
什么?//
将被错过。
/^\s*\/*\s*|\s*\/*\s*$/gm
它来处理斜线和多个斜线前后的一些可能的空格,并添加*
没有真正的理由在这里使用正则表达式,字符串函数可以正常工作:
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上查看此操作。
参考文献:
如果不是使用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()
函数可以实现比仅过滤空字符串(这是默认行为)更复杂的逻辑。
警告词-这不像这里的其他摘要那么快。
万一有人需要过早的优化...
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)
theString.replace(/^\/|\/$/g, '')
对于阅读代码的人来说确实很容易理解,但可能比此版本慢!