2011-10-21 22 views
5

Wszystko, czego chcę, to usunąć wszystkie numery z ciąg znaków.Proste wyrażenie regularne javascript do strip numerów

Więc

var foo = "bar01"; 
alert(foo.replace(/\d/,'')); 

co oczywiście daje "Bar1" bo już podano tylko jedną cyfrę. Więc dlaczego nie ta praca:

var foo = "bar01"; 
alert(foo.replace(/\d*/,'')); 

Który daje "bar01"

+0

Już znalazłem odpowiedź, to '.' zamiast' * ' – jdborg

+0

Niestety nie. To, o czym wspomniałeś, będzie działać w konkretnym przypadku "bar01", ponieważ mówisz, że pasuje do cyfry, po której następuje dowolny znak. To nie usunie cyfr na końcu łańcuchów, lub więcej niż 2 cyfry, maksimum, itd. Zobacz inne rozwiązania dla lepszego rozwiązania. – GregL

Odpowiedz

12

należy dodać opcję global

var foo = "bar01"; 
alert(foo.replace(/\d/g,'')); 

Wyraźnie można nawet zrobić coś takiego

var foo = "bar01"; 
alert(foo.replace(/\d+/g,'')); 

, ale nie wiem, czy będzie szybciej (i na końcu różnica prędkości byłaby bardzo, bardzo, bardzo, bardzo mały, chyba że parsujesz megabajty tekstu)

Jeśli chcesz przetestować http://jsperf.com/replace-digits, drugi wydaje się szybszy dla "bloków" 10 cyfr i dużych tekstów.

+0

Nie jestem pewien, czy jest szybszy czy wolniejszy, ale użycie '/ \ d +/g' dla wyrażenia regularnego ma więcej sensu. – GregL

+0

@GregL W końcu, jeśli usuwasz wszystkie cyfry, pierwszy ma więcej sensu. Z pierwszym usuwasz wszystkie cyfry po kolei, a po drugie wyszukujesz "bloby" cyfr (jednej lub więcej cyfr) i usuwasz je. Człowiek pomyślałby w drugi sposób (ponieważ ludzie mają bardziej "globalny" pogląd), maszyny w pierwszy sposób. – xanatos

+0

Który z nich jest bardziej sensowny, jest kwestią opinii, ale byłem po prostu ciekawy, jak silnik JS działał pod osłonami - czy bardziej wydajnym byłoby, gdyby silnik wyrażeń regularnych zastępował całe bąble liczb na raz lub pojedyncze cyfry pojedynczo . Prawdopodobnie zależy to od silnika JS. – GregL

2

Prawdopodobnie chcesz określić g flag foo.replace(/\d/g,'')

2
alert(foo.replace(/\d+/g,'')); 
1

Wypróbuj 'globalny' flag

foo.replace(/\d*/g,'')