Ответ 1
return theString.replace(/^\/|\/$/g, '');
"Заменить все (/.../g
) ведущие косые черты (^\/
) или (|
) завершающую косую черту (\/$
) с пустой строкой."
У меня есть эти строки в javascript:
/banking/bonifici/italia
/banking/bonifici/italia/
и я хотел бы удалить первую и последнюю косую черту, если она существует.
Я пробовал ^\/(.+)\/?$
, но он не работает.
Чтение некоторого сообщения в stackoverflow. Я обнаружил, что php имеет функцию обрезки, и я мог бы использовать его javascript-перевод (http://phpjs.org/functions/trim: 566), но я предпочла бы "простое" регулярное выражение.
return theString.replace(/^\/|\/$/g, '');
"Заменить все (/.../g
) ведущие косые черты (^\/
) или (|
) завершающую косую черту (\/$
) с пустой строкой."
Нет реальной причины использовать регулярное выражение здесь, строковые функции будут работать нормально:
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.
Литература:
На всякий случай, если кто-то нуждается в преждевременной оптимизации здесь...
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)
В случае, если использование 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);