2009-10-20 15 views
9

istnieje wiele skryptów do przycinania łańcucha znaków w javascript, ale nie ma sposobu na lewy przycinanie łańcucha.Lewy przycinanie w JavaScript

To co mam użyć do wykończenia:

String.prototype.trim = function() { 
    return this.replace(/^\s+|\s+$/g,""); 
} 

Ale chciałbym zmienić to trochę i utworzyć nową funkcję o nazwie leftTrim że tylko usuwa główną przestrzeń. Mój regex jest dość ograniczony, więc każda pomoc jest bardzo doceniana.

Cheers

Odpowiedz

19

Zastosowanie:

String.prototype.leftTrim = function() { 
    return this.replace(/^\s+/,""); 
} 

W regex się:

  • ^czyli "od początku napisu"
  • \ s oznacza klasę znaków spacji
  • + oznacza jeden lub więcej (chciwy)

tak ....

  • ^\ s + oznacza "jeden lub więcej kolejnych znaków odstępu od początku klasy"

UWAGA: g flagę na końcu regex jest niepotrzebny, ponieważ kotwice (^ i $) jawnie definiują to, co będzie pasować. Nie może być wielu dopasowań.

Zobacz https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/RegExp Szczegółowe informacje na temat regex składni w JavaScript

+1

Uwaga: modyfikator/g (globalny) nie jest konieczny i może sprawić, że będzie trochę mniej efektywny. – Jesper

+0

Co to jest "g" BTW? Tęskniłeś za tym. –

+0

dzięki Jesper, byłem w trakcie jego edycji już kiedy to napisałeś. @Vinegar, 'g' oznacza" dopasowanie globalne "i służy do wyszukiwania wielu dopasowań –

1
String.prototype.leftTrim = function() { 
     return this.replace(/^\s+/,""); 
} 
3

Ja już odpowiedział a similar question zaledwie kilka chwil temu, ale tutaj jest moje rozwiązanie do Twojego pytania.

String.prototype.trimLeft = String.prototype.trimLeft || function() { 
    var start = -1; 

    while(this.charCodeAt(++start) < 33); 

    return this.slice(start, this.length); 
}; 

Powyższe rozwiązanie jest oparte na Ariel Flesler fast trim function oraz fakt, że Firefox 3.5 i powyżej ma wbudowany trimLeft metody na obiekcie String.