Mam te ciągi w javascript:
/banking/bonifici/italia
/banking/bonifici/italia/
i chciałbym usunąć pierwszy i ostatni ukośnik, jeśli istnieje.
Próbowałem, ^\/(.+)\/?$
ale to nie działa.
Czytając jakiś post w stackoverflow stwierdziłem, że php ma funkcję przycinania i mógłbym użyć jego tłumaczenia javascript ( http://phpjs.org/functions/trim : 566), ale wolałbym „proste” wyrażenie regularne.
javascript
regex
CorPao
źródło
źródło
Odpowiedzi:
return theString.replace(/^\/|\/$/g, '');
„Zastąp wszystkie (
/.../g
) wiodące ukośniki (^\/
) lub (|
) końcowe ukośniki (\/$
) pustym ciągiem”.źródło
//www.google.com
?//
zostanie pominięty./^\s*\/*\s*|\s*\/*\s*$/gm
, zajmuje się możliwymi białymi znakami przed i po ukośnikach i wielu ukośnikach, dodając *Nie ma prawdziwego powodu, aby używać tutaj wyrażenia regularnego, funkcje tekstowe będą działać dobrze:
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"
Zobacz to w akcji na jsFiddle .
Bibliografia:
String.substr
String.charAt
źródło
W przypadku, gdy użycie RegExp nie jest opcją lub musisz obsługiwać przypadki narożne podczas pracy z adresami URL (takimi jak podwójne / potrójne ukośniki lub puste wiersze bez skomplikowanych zamienników) lub wykorzystując dodatkowe przetwarzanie, oto mniej oczywiste, ale bardziej funkcjonalne- stylowe rozwiązanie:
const urls = [ '//some/link///to/the/resource/', '/root', '/something/else', ]; const trimmedUrls = urls.map(url => url.split('/').filter(x => x).join('/')); console.log(trimmedUrls);
W tym fragmencie
filter()
funkcja może zaimplementować bardziej złożoną logikę niż tylko filtrowanie pustych ciągów (co jest zachowaniem domyślnym).Słowo ostrzeżenia - to nie jest tak szybkie, jak inne fragmenty tutaj.
źródło
Na wszelki wypadek, gdyby ktoś potrzebował tu przedwczesnej optymalizacji ...
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)
źródło
theString.replace(/^\/|\/$/g, '')
jest naprawdę prosta i łatwa do zrozumienia dla osób czytających kod, ale prawdopodobnie wolniejsza niż ta!