Подтвердить что ты не робот

Регулярное выражение Javascript: удаление первой и последней косой черты

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

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

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

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

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

4b9b3361

Ответ 1

return theString.replace(/^\/|\/$/g, '');

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

Ответ 2

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

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.

Литература:

Ответ 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)

Ответ 4

В случае, если использование 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);