Yanıtlar:
Düzenli ifadeler:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Bu, '102' ve '1948948' içinde iki öğe olan bir Dizi döndürecektir. Dilediğiniz gibi çalışın. Herhangi biriyle eşleşmezse, boş döndürür.
Bunları birleştirmek için:
'something102asdfkj1948948'.match( numberPattern ).join('')
Karmaşık ondalık sayılarla uğraşmadığınızı varsayarsak, bu yeterli olacaktır.
d
.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
Ayrıca tüm rakam olmayan karakterleri ( \D
veya [^0-9]
) çıkarabilirsiniz :
let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');
console.log(word_Without_Numbers)
Ondalık kesirli ve eksi işaretli sayı için şu pasajı kullanıyorum:
var NUMERIC_REGEXP = /[-]{0,1}[\d]*[.]{0,1}[\d]+/g;
'2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)
// return ["2.2", "3.1", "4", "-7.6"]
Güncelleme: - 7/9/2018
Normal ifadeyi görsel olarak düzenlemenizi sağlayan bir araç buldum: JavaScript Normal İfade Ayrıştırıcı ve Görselleştirici .
Güncelleme:
İşte regexp'de hata ayıklayabileceğiniz bir tane daha: Online regex tester ve debugger .
Güncelleme:
Bir diğeri: RegExr .
Güncelleme:
Yalnızca rakam istiyorsanız:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
Şimdi rakamları birleştirdin
Sanırım dizeden sayı (lar) almak istiyorsunuz. Bu durumda aşağıdakileri kullanabilirsiniz:
// Returns an array of numbers located in the string
function get_numbers(input) {
return input.match(/[0-9]+/g);
}
var first_test = get_numbers('something102');
var second_test = get_numbers('something102or12');
var third_test = get_numbers('no numbers here!');
alert(first_test); // [102]
alert(second_test); // [102,12]
alert(third_test); // null
get_numbers/1
sayı değil, bir dize dizisi döndürür. ["102"]
["102", "12"]
Verilen cevaplar aslında sorunuzla eşleşmiyor, bu da sondaki bir sayı anlamına geliyor. Ayrıca, bir ipi geri aldığınızı unutmayın; gerçekten bir sayıya ihtiyacınız varsa , sonucu dökün:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
Bir web sayfasında sayısal öğe kimlikleriyle uğraşıyorsanız, kodunuz aynı zamanda yararlı bir şekilde bir kabul edebilir Element
, sayıyı onun id
(veya bir ile ilk ebeveyninden id
) çıkarabilir ; Event
Kullanışlı bir şeyiniz varsa, muhtemelen bundan Element
da yararlanabilirsiniz.
IMO, Chen Dachao'nun şu anda 3 numaralı cevabı, herhangi bir sayıyı yakalamak istiyorsanız doğru yoldur, ancak normal ifade şunlardan kısaltılabilir:
/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g
için:
/-?\d*\.?\d+/g
Örneğin, bu kod:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
bu diziyi üretir:
["217","255","0","0","-0.8","-255","0","0","0","70.71"]
Normal ifadeyi tam olarak test etmesi ve burada kaydırması gerekmemesi için bir MDN doğrusal gradyan örneğini kestim. Negatif sayılar, ondalık sayılar, deg ve% gibi birim son ekleri, tutarsız virgül ve boşluk kullanımı ve fazladan nokta / nokta ve tire / tire karakterlerini "lin-grad.ient" metnine dahil ettiğimi düşünüyorum. ". Eksik bir şey varsa lütfen bana bildirin. İşleyemediğini görebildiğim tek şey, "0..8" gibi kötü biçimlendirilmiş bir ondalık sayı.
Gerçekten bir sayı dizisi istiyorsanız, tüm diziyi aynı kod satırında dönüştürebilirsiniz:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
CSS işlevlerini ayrıştıran özel kodumun nokta / nokta karakterinin sayısal olmayan kullanımı konusunda endişelenmesine gerek yoktur, bu nedenle normal ifade daha da basit olabilir:
/-?[\d\.]+/g
Bölme ve normal ifade kullanma:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
@ Syntle'ın cevabına göre, yalnızca sayısal olmayan karakterlere sahipseniz, bir Uncaught TypeError: Cannot read property 'join' of null
.
Bu, eşleşme bulunmazsa hataları önler ve boş bir dize döndürür:
('something'.match( /\d+/g )||[]).join('')
Ayrıca nokta / virgülle ayrılmış sayılar istiyorsanız, o zaman:
\d*\.?\d*
veya
[0-9]*\.?[0-9]*
Normal ifadelerinizi test etmek için https://regex101.com/ kullanabilirsiniz .