2010-11-16 12 views
18

chcę int od ciąg w javascript, jak mogę dostać je odJak analizować ciąg do int w javascript

test1, stsfdf233, fdfk323,

to ktoś mi pokazać sposób, aby uzyskać całkowitą od tego strunowy.

jest regułą, że int jest zawsze z tyłu ciągu znaków.

jak mogę uzyskać int, który był w końcu w moim ciąg

Odpowiedz

51
var s = 'abc123'; 
var number = s.match(/\d+$/); 
number = parseInt(number, 10); 

Pierwszym krokiem jest proste wyrażenie regularne - \d+$ dopasuje cyfry zbliża się do końca.
W następnym kroku używamy parseInt na łańcuchu , który wcześniej dopasowaliśmy, aby uzyskać prawidłową liczbę.

+0

To nie zadziała. 'liczba' to tablica. – jwueller

+1

to nie działa dla ciągów takich jak "abcs12s3", "123abc" –

+5

@Chinmayee: "jest regułą, że int jest zawsze z tyłu ciągu znaków" – darioo

2
var str = "stsfdf233"; 
var num = parseInt(str.replace(/\D/g, ''), 10); 
+1

Uwaga: to rozwiązanie działa nawet wtedy, gdy liczby nie są na końcu łańcucha (również dla ciągu jak ab12c34) –

+1

@fcalderan: Tak, ale prawie na pewno * nie tak jak powinno *. (Twój przykład "ab12c34" zwróci numer 1 223. Pożądany wynik? Wątpię w to.) –

+0

@ T.J. Crowder, to jest powód mojego komentarza ... –

-2
javascript:alert('stsfdf233'.match(/\d+$/)[0]) 

Global.parseInt z radix jest przesadą tutaj, regexp ekstrakcji cyfry dziesiętne i już rigth przycięte ciąg

0

To może pomóc

var str = 'abc123'; 
var number = str.match(/\d/g).join(""); 
3

Można użyć regex wyodrębnić numery w ciągu znaków poprzez String#match i przekształć każdą z nich w numer poprzez parseInt:

var str, matches, index, num; 

str = "test123and456"; 
matches = str.match(/\d+/g); 
for (index = 0; index < matches.length; ++index) { 
    num = parseInt(matches[index], 10); 
    display("Digit series #" + index + " converts to " + num); 
} 

Live Example

Jeśli numery naprawdę występują tylko na końcach struny lub po prostu chcesz przekonwertować pierwszy zestaw cyfr znaleźć można uprościć nieco:

var str, matches, num; 

str = "test123"; 
matches = str.match(/\d+/); 
if (matches) { 
    num = parseInt(matches[0], 10); 
    display("Found match, converts to: " + num); 
} 
else { 
    display("No digits found"); 
} 

Live example

Jeśli chcesz ignorować cyfry, które nie znajdują się na końcu dodać $ do końca regex:

matches = str.match(/\d+$/); 

Live example

+2

To jest '/ \ d + $ /'. Fajne 'jeśli', nawiasem mówiąc':) ' – Kobi

+0

@Kobi: ** Dzięki ** za złapanie czegoś' $ ', złapałem to w przykładzie, ale nie zdałem sobie sprawy, że wpisałem to w tekście (I zwykle * kopiowanie * z przykładu do tekstu, a nie na odwrót). –

+0

+1 'if (mecze)' Jestem pewien, że będzie to szybszy test niż poleganie na 'parseInt()', aby zrobić to za ciebie. – user113716

1
var match = "stsfdf233".match(/\d+$/); 
var result = 0; // default value 
if(match != null) { 
    result = parseInt(match[0], 10); 
} 
1

Jeszcze inną alternatywą, tym razem bez wymiany lub wyrażenie regularne, tylko jeden prosty pętli:

function ExtractInteger(sValue) 
{ 
    var sDigits = ""; 
    for (var i = sValue.length - 1; i >= 0; i--) 
    { 
     var c = sValue.charAt(i); 
     if (c < "0" || c > "9") 
      break; 
     sDigits = c + sDigits; 
    } 
    return (sDigits.length > 0) ? parseInt(sDigits, 10) : NaN; 
} 

Przykład zastosowania:

var s = "stsfdf233"; 
var n = ExtractInteger(s); 
alert(n); 
+2

Jeden mały komentarz - chcesz wywołać 'parseInt (sDigits, 10)', spróbuj 'abc012', a następnie' abc09'. – Kobi

+0

@Kobi: dobry połów .. zmienił mój post teraz. Dzięki! –

1

Użyj mojego rozszerzenie klasy String:

String.prototype.toInt=function(){ 
    return parseInt(this.replace(/\D/g, ''),10); 
} 

wówczas:

"ddfdsf121iu".toInt(); 

zwróci liczbę całkowitą: 121

0

Pierwsza dodatnia lub ujemna liczba:

"foo-22bar11".match(/-?\d+/); // -22 
+0

Czy możesz wyjaśnić swoją odpowiedź? – Rico

+0

To jest złe, ponieważ nie odpowiada, ale nie powinno być usunięte. Ma wartość. Znajduje pierwszy –

+0

OP nie pytał o wszystkie zdarzenia, nie chciałem tego. I żadna z podanych odpowiedzi nie bierze pod uwagę liczb ujemnych i to jest to, czego potrzebowałem, więc wymyśliłem to. – brannigan