2009-03-04 5 views
26

bir dizedeki ilk Int (ler) alın:Ben bir döngüde bir dize var ve her döngü için böyle metinler görünüyor doludur javascript

"123 merhaba herkes 4" "4567 şeyler eğlenceli 67 " " 12368 daha fazla özellik "

Sadece dize içindeki metne ilk sayıları almak istiyorum ve uzunluğunu bilmiyorum.

Şimdiden teşekkürler!

+0

başlangıç ​​ya da bitiş numaralarını almak için * dizede bir sayı var, bu tek liner kullanabilirsiniz: "" Merhaba 123 orada! 45 ".match (/ \ d + /). Shift();' Aksi takdirde, '.shift()' yapmadan önce 'null' için test etmek istersiniz. [Kaynak] (https://stackoverflow.com/ a/609588/114558) – rinogo

cevap

39

sayı dize başında ise:

(" hello 123 everybody 4").replace(/(^.+)(\w\d+\w)(.+$)/i,'$2'); //=> '123' 

Ve için: o dizede bir yerde ise

("123 hello everybody 4").replace(/(^\d+)(.+$)/i,'$1'); //=> '123' 

Karakterler arasındaki sayı:

("hello123everybody 4").replace(/(^.+\D)(\d+)(\D.+$)/i,'$2'); //=> '123' 

[zeyilname]

bir dize tüm numaraları maç için bir normal ifade:

"4567 stuff is fun4you 67" 
    .match(/^\d+|\d+\b|\d+(?=\w)/g) 
    .map(function (v) {return +v;}); //=> [4567, 4, 67] 

:

"4567 stuff is fun4you 67".match(/^\d+|\d+\b|\d+(?=\w)/g); //=> ["4567", "4", "67"] 

Sen Sayıların bir diziye diziyi eşleştirebilir Şamandıralar dahil:

"4567 stuff is fun4you 2.12 67" 
    .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) 
    .map(function (v) {return +v;}); //=> [4567, 4, 2.12, 67] 

olasılık dize, herhangi bir sayıda içermediğini varsakullanın: Eğer * biliyorsanız

("stuff is fun" 
    .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || []) 
    .map(function (v) {return +v;}); //=> [] 

Yani, dize 4567 stuff is fun4you 2.12 67"

// start number 
var startingNumber = ("4567 stuff is fun4you 2.12 67" 
    .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || []) 
    .map(function (v) {return +v;}).shift(); //=> 4567 

// end number 
var endingNumber = ("4567 stuff is fun4you 2.12 67" 
    .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || []) 
    .map(function (v) {return +v;}).pop(); //=> 67 
+0

Bunlar çok iyi çalışmıyor. ("hello123"). değiştirin (/(^.+\D)(\d+)(\D.+$)/i,'$2 ') "hello124" değerini döndürür. Aslında, sayı dizenin sonundaysa, bunların hiçbiri işe yaramaz. – user1311069

+1

@ user1311069: Peki, bu durum cevaba dahil edilmedi. Çözümünüzü sağladıysanız, yapıcı olacaktır. Ücretsiz hissedin;) – KooiInc

+1

@ user1311069: ihtiyaçlarınızı karşılayan birkaç ekstra yöntem sağladı. – KooiInc

5

Sadece bir int istiyorsan, sadece parseInt(myString, 10). (10 tabanı 10 işaret, aksi takdirde, JavaScript, 8 ya da 16 gibi, farklı bir taban kullanmaya çalışır)

39
var str = "some text and 856 numbers 2"; 
var match = str.match(/\d+/); 
document.writeln(parseInt(match[0], 10)); 

şeritler (belki boşluk ile birlikte) sayısı ile başlarsa, basit parseInt(str, 10) yeterlidir. parseInt, önde gelen boşlukları atlayacak. 08 gibi aksi dize (çoğu uygulamalarda parseInt sekizlik olarak 0 ile başlayan numaralar düşünün) 0 dönüştürülecektir çünkü

10, gereklidir.

+3

Düzenli ifade verildiğinde, '/ \ d + /' 'parseInt' yerine gerçekten ihtiyacınız yoktur,' match.shift() 'veya' Number (match) gibi bir şey.shift()) 'yeterlidir. Ayrıca, aslında bir eşleşme olup olmadığını kontrol etmeniz gerekir. Giriş dizesi hiç sayı içermeyebilir: bu durumda "eşleme", "null" olacaktır. – KooiInc

1

kullanın Düzenli İfadeler:

var re = new RegExp(/^\d+/); //starts with digit, one or more 
var m = re.exec("4567 stuff is fun 67"); 
alert(m[0]); //4567 

m = re.exec("stuff is fun 67"); 
alert(m); // null