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

问题描述 投票:0回答:7

我在 javascript 中有这些字符串:

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

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

我尝试过

^\/(.+)\/?$
但没用。

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

javascript regex
7个回答
264
投票
return theString.replace(/^\/|\/$/g, '');

“将所有 (

/.../g
) 前导斜杠 (
^\/
) 或 (
|
) 尾随斜杠 (
\/$
) 替换为空字符串。”


42
投票

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

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

参考资料:


10
投票

如果使用 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()
函数可以实现比仅过滤空字符串(这是默认行为)更复杂的逻辑。

警告——这并不像这里的其他片段那么快。


9
投票

一个衬垫,无正则表达式,处理多次出现

const trimSlashes = str => str.split('/').filter(v => v !== '').join('/');

console.log(trimSlashes('/some/path/foo/bar///')); // "some/path/foo/bar"

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)

2
投票

您可以使用 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;
}

0
投票

您可以使用下面的正则表达式来删除多余的斜杠,并确保字符串的段之间只有一个斜杠:

const input = '//some/link///to/the/resource/';
const output = input.replace(/\/+/g, '/').replace(/^\/|\/$/g, '');
console.log(output); // 'some/link/to/the/resource'

说明:

  1. input.replace(/\/+/g, '/')
    :这会将多个连续斜杠(
    //
    或更多)替换为单个
    /
  2. .replace(/^\/|\/$/g, '')
    :这会从字符串中删除任何前导或尾随斜杠。
© www.soinside.com 2019 - 2024. All rights reserved.