Регулярное выражение Javascript: удалить первую и последнюю косую черту - PullRequest
68 голосов
/ 01 октября 2010

У меня есть эти строки в JavaScript:

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

и я хотел бы удалить первый и последний слеш, если он существует.

Я пытался ^\/(.+)\/?$, но это не работает.

Читая какой-то пост в stackoverflow, я обнаружил, что php имеет функцию обрезки, и я мог бы использовать его перевод JavaScript (http://phpjs.org/functions/trim:566), но я бы предпочел «простое» регулярное выражение.

Ответы [ 4 ]

159 голосов
/ 01 октября 2010
return theString.replace(/^\/|\/$/g, '');

"Заменить всю (/.../g) начальную косую черту (^\/) или (|) конечную косую черту (\/$) на пустую строку."

30 голосов
/ 01 октября 2010

Нет реальной причины использовать регулярное выражение здесь, строковые функции будут работать нормально:

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 .

Ссылки:

5 голосов
/ 04 декабря 2017

В случае, если использование 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 голосов
/ 12 марта 2016

На всякий случай, если кому-то нужна преждевременная оптимизация здесь ...

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...