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ęć /.


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 .


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)

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, '');

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


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


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);

1

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

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

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

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)

-3
url=url.substring(1,url.Length-1);

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


1
url.lengthnieurl.Length
Arthur
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.