Jak usunąć pierwszy i ostatni znak ciągu

161

Zastanawiam się, jak usunąć pierwszy i ostatni znak ciągu w JavaScript.

Mój adres URL jest wyświetlany /installers/i po prostu chcę installers.

Czasami tak będzie /installers/services/i po prostu potrzebuję installers/services.

Nie mogę więc po prostu usunąć cięć /.

Arachid
źródło
Próbuję po prostu pozbyć się pierwszego i ostatniego znaku tego. Po prostu chwytam adres URL
Peanut,
Zastanawiam się tylko, dlaczego nikt nie zauważa, że ​​przycinanie ukośników (jak wskazuje tekst) i bezwarunkowe usuwanie pierwszego i ostatniego znaku ciągu (jak wskazuje podpis) to nie to samo. Ale wyjaśnia szeroki zakres odpowiedzi poniżej.
JensG

Odpowiedzi:

360

Proszę bardzo

var yourString = "/installers/";
var result = yourString.substring(1, yourString.length-1);

console.log(result);

Lub możesz użyć .slicezgodnie z sugestią Ankit Gupta

var yourString = "/installers/services/";

var result = yourString.slice(1,-1);

console.log(result);

Dokumentacja wycinka i podciągu .

Dieterg
źródło
6
Ale z adresu URL nie kończy się ukośnikiem, zajmie 1 znak
Martijn
7
@Martijn to dokładnie odpowiada na pytanie. Nikt nie powiedział, że nie chcesz rozbierać niczego poza ukośnikiem;). +1 ode mnie - kod powinien mówić, co ma robić, a nie przykłady wyrażeń regularnych tutaj.
Episodex
Ale jeśli chcesz przenieść się na inny serwer, ukośnik może tam nie być (lub może celowo skonfigurowałeś zmianę). Nie głosowanie w dół, po prostu wskazanie tego :)
Martijn
Końcowy ukośnik zawsze będzie tam, ponieważ wskazuje na plik index.php ...
Peanut
131

Lepszym rozwiązaniem może być użycie plasterka takiego jak:

string.slice(1, -1)
Ankit Gupta
źródło
14

Nie sądzę, by jQuery miało z tym coś wspólnego. W każdym razie spróbuj wykonać następujące czynności:

url = url.replace(/^\/|\/$/g, '');
liść
źródło
1
Jak dotąd wygląda to na najbardziej poprawne. Jedyną rzeczą, bym dodać kwantyfikator, tylko w przypadku: /^\/+|\/+$/g.
georg
8

Możesz to powtórzyć:

"string".replace(/^\/?|\/?$/, "")
"/installers/services/".replace(/^\/?|\/?$/, "") // -> installers/services

Wyjaśnienie wyrażenia regularnego:
- Opcjonalny pierwszy ukośnik:, ^/?escaped -> ^\/?( ^średni początek napisu)
- Pionową kreskę (|) można odczytać jako or
- Niż ukośnik opcji na końcu -> /?$, znak ucieczki -> \/?$( $oznacza koniec łańcucha )

W połączeniu ^/?|/$bez ucieczki. Opcjonalny pierwszy ukośnik LUB opcjonalny ostatni ukośnik

Martijn
źródło
Chodzi o to, że nie mogę usunąć znaku „/”, ponieważ czasami potrzebuję go do oddzielenia wewnętrznych części adresu URL
Peanut
Wewnętrzne nacięcia nie znikają. Zredaguję i wyjaśnię wyrażenie regularne
Martijn
3
Myślę, że potrzebujesz flagi globalnej, aby to działało: „/installers/services/".replace(/^\/?|\/?$/g,” ”)
Matt Gaunt,
3

Możesz użyć substringmetody

s = s.substring(0, s.length - 1) //removes last character

inną alternatywą jest slicemetoda

Hessam
źródło
3

Możesz zrobić coś takiego:

"/installers/services/".replace(/^\/+/g,'').replace(/\/+$/g,'')

To wyrażenie regularne jest typowym sposobem zachowania tego samego zachowania trimfunkcji używanej w wielu językach.

Możliwą implementacją funkcji przycinania jest:

function trim(string, char){
    if(!char) char = ' '; //space by default
    char = char.replace(/([()[{*+.$^\\|?])/g, '\\$1'); //escape char parameter if needed for regex syntax.
    var regex_1 = new RegExp("^" + char + "+", "g");
    var regex_2 = new RegExp(char + "+$", "g");
    return string.replace(regex_1, '').replace(regex_2, '');
}

Który usunie wszystko /na początku i na końcu ciągu. Obsługuje przypadki takie jak///installers/services///

Możesz też po prostu zrobić:

"/installers/".substring(1, string.length-1);
OlivierH
źródło
1

posługiwać się .replace(/.*\/(\S+)\//img,"$1")

"/installers/services/".replace(/.*\/(\S+)\//img,"$1"); //--> services

"/services/".replace(/.*\/(\S+)\//img,"$1"); //--> services
Victor Ribeiro da Silva Eloy
źródło
To nie robi tego, o co prosił OP.
Emile Bergeron,
1

jeśli chcesz usunąć pierwszą literę ciągu

string.slice(1, 0)

i usunąć ostatnią literę

string.slice(0, -1)
Rizo
źródło
-3
url=url.substring(1,url.Length-1);

W ten sposób możesz używać katalogów, jeśli jest to ... / ... / ... / ... itd.

Kuzgun
źródło
1
url.lengthnieurl.Length
Arthur