Ekstrak ("dapatkan") angka dari sebuah string

355

Saya memiliki string dalam javascript seperti `# box2 'dan saya hanya ingin' 2 'darinya.

Mencoba:

var thestring = $(this).attr('href');
var thenum = thestring.replace( /(^.+)(\w\d+\w)(.+$)/i,'$2');
alert(thenum);

Itu masih mengembalikan # box2 dalam peringatan, bagaimana saya bisa membuatnya bekerja?

Perlu mengakomodasi untuk setiap nomor panjang yang terpasang di ujung.

pengguna1022585
sumber
1
Anda bisa melakukan seperti ini. ini akan bekerja dengan baik. var thestring = $ (this) .attr ('href'); var thenum = parsefloat (thestring); waspada (thenum);
Vivek Shukla
1
kode ini berfungsi dengan baik untuk saya tetapi untuk satu kasus, saya memiliki string '2,5 / mil' dan saya ingin mengekstrak 2,5 dari ini. Kode di atas memberi saya 25 bukannya 2.5
Bijay Singh

Jawaban:

578

Untuk contoh khusus ini,

 var thenum = thestring.replace( /^\D+/g, ''); // replace all leading non-digits with nothing

dalam kasus umum:

 thenum = "foo3bar5".match(/\d+/)[0] // "3"

Karena jawaban ini mendapatkan popularitas karena beberapa alasan, inilah bonusnya: generator regex.

function getre(str, num) {
  if(str === num) return 'nice try';
  var res = [/^\D+/g,/\D+$/g,/^\D+|\D+$/g,/\D+/g,/\D.*/g, /.*\D/g,/^\D+|\D.*$/g,/.*\D(?=\d)|\D+$/g];
  for(var i = 0; i < res.length; i++)
    if(str.replace(res[i], '') === num) 
      return 'num = str.replace(/' + res[i].source + '/g, "")';
  return 'no idea';
};
function update() {
  $ = function(x) { return document.getElementById(x) };
  var re = getre($('str').value, $('num').value);
  $('re').innerHTML = 'Numex speaks: <code>' + re + '</code>';
}
<p>Hi, I'm Numex, the Number Extractor Oracle.
<p>What is your string? <input id="str" value="42abc"></p>
<p>What number do you want to extract? <input id="num" value="42"></p>
<p><button onclick="update()">Insert Coin</button></p>
<p id="re"></p>

georg
sumber
15
-1, "#box2_col3".replace( /^\D+/g, '')seharusnya ditunjukkan 2, bukan 2_col3.
Shiplu Mokaddim
2
@ shiplu.mokadd.im: Saya tidak melihat referensi apa pun #box2_col3dalam pertanyaan itu.
georg
1
Ya tidak ada referensi #box2_col3. Tapi lihat OP regex bekas ( \w)(.+$)) yang dengan jelas menunjukkan ada karakter lain setelah nomor tersebut.
Shiplu Mokaddim
3
dalam hal ini pola Anda juga gagal jika ada angka sebelum akhir.
Shiplu Mokaddim
2
Anda dapat replacebekerja dengan nomor terkemuka dengan menggunakan theString.replace(/^.*\D+/g, '');:, tetapi solusi shiplu.mokadd.im lebih baik.
LandonSchropp
225

Anda harus mencoba yang berikut ini:

var txt = "#div-name-1234-characteristic:561613213213";
var numb = txt.match(/\d/g);
numb = numb.join("");
alert (numb);​

hasil

1234561613213213
Jason Marshall
sumber
1
jawaban yang bagus tetapi bagaimana jika saya ingin set angka secara terpisah. yaitu 1234, 5616133 ...
Amar Singh
Atau one-liner + parsing ke integer:parseInt(txt.match(/\d/g).join(''), 10)
Lukas Liesis
" $ 20.0 ".match(/\d/g).join('') => "200" (hanya mengatakan)
vsync
91

Saya pikir ungkapan reguler ini akan membantu tujuan Anda:

var num = txt.replace(/[^0-9]/g,'');

Dimana txtsenar Anda.

Ini pada dasarnya merobek segala sesuatu yang bukan angka.

Saya pikir Anda dapat mencapai hal yang sama dengan menggunakan ini juga:

var num = txt.replace(/\D/g,'');
Theodoros Klikas
sumber
1
/[^0-9]/g+1 untuk keterbacaan. Juga digunakan dengan sebagian besar jawaban di sini: stackoverflow.com/q/1862130/1066234
Kai Noack
58

Coba yang berikut string.replace(/[^0-9]/g, '');ini : Ini akan menghapus semua karakter non-digit, hanya menyisakan digit dalam string

function retnum(str) { 
    var num = str.replace(/[^0-9]/g, ''); 
    return parseInt(num,10); 
}

console.log('abca12bc45qw'.replace(/[^0-9]/g, ''));
console.log('#box2'.replace(/[^0-9]/g, ''));

xbalaji
sumber
2
Ini lebih baik daripada jawaban yang diterima, karena ia mengganti semua non-angka secara global dan btw, /[^0-9]/gdapat diganti dengan /[^\d]/g.
CPHPython
52

Menggunakan fungsi pertandingan.

var thenum = thestring.match(/\d+$/)[0];
alert(thenum);

jsfiddle

Shiplu Mokaddim
sumber
1
Anda juga dapat menambahkan unary '+' untuk menjadikannya integer var thenum = + thestring.match (/ \ d + $ /) [0];
Sergey Onishchenko
Saya kira ini tidak berfungsi untuk> 1 digit angka? (Saya mengerti pertanyaannya adalah untuk 1 digit angka, tapi saya melihat kemungkinan angka> 10.)
Felix
@nissemand Jangan menebak . Coba sendiri. Bahkan kamu tidak melihat biola.
Shiplu Mokaddim
Suka ini. Cara paling sederhana untuk mengekstraksi angka menjadi variabel tanpa menyentuh atau memodifikasi elemen. Saya akan menghargai sebuah kombo dengan masing-masing untuk sebuah kebetulan multple di dalam sebuah string. yaitu string 12a55 melaporkan angka terakhir, tidak semua.
m3nda
1
@YevgeniyAfanasyev seharusnya tidak. Periksa pertanyaan aslinya. Khususnya baris terakhir. Nomor harus di akhir.
Shiplu Mokaddim
33

Mencoba semua kombinasi yang dikutip di atas dengan Kode ini dan membuatnya berfungsi, adalah satu-satunya yang bekerja pada string itu ->(12) 3456-7890

var str="(12) 3456-7890";
str.replace( /\D+/g, '');

Hasil: "1234567890"

Obs: saya tahu bahwa string seperti itu tidak akan berada pada attr tetapi apa pun, solusinya lebih baik, karena lebih lengkap.

Paulo Roberto Rosa
sumber
Saya pikir lebih baik akan str.match(/\d+/g).map(Number)mengembalikan array
Artem Bernatskyi
33

Dan ini adalah cuplikan yang mengekstraksi harga dengan mata uang dan pemformatan:

var price = "£1,739.12";
parseFloat(price.replace( /[^\d\.]*/g, '')); // 1739.12
Lacho Tomov
sumber
13

Anda dapat menggunakan metode parseInt yang bagus

itu akan mengonversi digit terkemuka ke angka

parseInt("-10px");
// will give you -10
Eugene Tiurin
sumber
18
ini hanya berfungsi ketika nomornya ada di awal string
Russj
2
kembalinya NaN
Ahmed Syed
7

Untuk string seperti #box2, ini seharusnya berfungsi:

var thenum = thestring.replace(/^.*?(\d+).*/,'$1');

jsFiddle:

icyrock.com
sumber
4

Anda dapat menggunakan ekspresi reguler.

var txt="some text 2";
var numb = txt.match(/\d/g);
alert (numb);

Itu akan mengingatkan 2.

Robby Shaw
sumber
4
-1 beberapa digit tidak akan ditangkap dan untuk menggunakan array dalam lansiran
Shiplu Mokaddim
4

Dengan Ekspresi Reguler , cara mendapatkan angka dari String, misalnya:

String myString = "my 2 first gifts were made by my 4 brothers";
myString = myString .replaceAll("\\D+","");
System.out.println("myString : " + myString);

hasilnya myStringadalah " 24"

Anda dapat melihat contoh kode yang sedang berjalan ini di sini: http://ideone.com/iOCf5G

Jorgesys
sumber
5
java! == javascript - replaceAll tidak ada di javascript standar. Hanya beberapa perpustakaan seperti jQuery yang memiliki metode itu. Di masa depan, Anda harus mengklarifikasi.
Levi Roberts
3

Anda dapat menggunakan Underscore String Library sebagai berikut

var common="#box"
var href="#box1"

_(href).strRight(common)

hasilnya adalah: 1

Lihat: https://github.com/epeli/underscore.string

DEMO:
http://jsfiddle.net/abdennour/Vyqtt/
Kode HTML:

<p>
    <a href="#box1" >img1</a>
    <a href="#box2" >img2</a>
    <a href="#box3" >img3</a>
    <a href="#box4" >img4</a>
</p>
<div style="font-size:30px"></div>

Kode JS:

var comm="#box"
$('a').click(function(){
  $('div').html(_($(this).attr('href')).strRight(comm))})

jika Anda memiliki akhiran sebagai berikut:

href="box1az" 

Anda dapat menggunakan demo berikutnya:

http://jsfiddle.net/abdennour/Vyqtt/1/

function retrieveNumber(all,prefix,suffix){
 var left=_(all).strRight(prefix);
 return _(left).strLeft(suffix);

}
Abdennour TOUMI
sumber
3

Ini solt. yang memeriksa tanpa data

var someStr = 'abc'; // add 123 to string to see inverse

var thenum = someStr.match(/\d+/);

if (thenum != null )
{
    console.log(thenum[0]);
}
else
{
 console.log('no number');
}
Gene Bo
sumber
2

Gunakan kode satu baris ini untuk mendapatkan angka pertama dalam sebuah string tanpa mendapatkan kesalahan:

var myInt = parseInt(myString.replace(/^[^0-9]+/, ''), 10);
Ruslan
sumber
2

silakan periksa di bawah javaScripts, di sana Anda hanya bisa mendapatkan nomor

var txt = "abc1234char5678#!9";
var str = txt.match(/\d+/g, "")+'';
var s = str.split(',').join('');
alert(Number(s));

keluaran: 1234567789

Thilina Sampath
sumber
2

Anda bisa mengekstraksi angka dari string menggunakan ekspresi regex:

let string = "xxfdx25y93.34xxd73";
let res = string.replace(/\D/g, "");
console.log(res); 

output: 25933473

Cassio Seffrin
sumber
1
var elValue     = "-12,erer3  4,-990.234sdsd";

var isNegetive = false;
if(elValue.indexOf("-")==0) isNegetive=true;

elValue     = elValue.replace( /[^\d\.]*/g, '');
elValue     = isNaN(Number(elValue)) ? 0 : Number(elValue);

if(isNegetive) elValue = 0 - elValue;

alert(elValue); //-1234990.234
Manoj Chavanke
sumber
Iklankan penjelasan. Misalnya mengapa Anda menggunakan yaitu regex ini.
mentallurg
1

Jawaban ini akan mencakup sebagian besar skenario. Saya dapat mengatasi situasi ini ketika pengguna mencoba menyalin menempelkan nomor telepon

  $('#help_number').keyup(function(){
    $(this).val().match(/\d+/g).join("")
  });

Penjelasan:

str= "34%^gd 5-67 6-6ds"

str.match(/\d+/g)

Ini akan memberikan array string sebagai output >> ["34", "56766"]

str.match(/\d+/g).join("")

join akan mengonversi dan menggabungkan data array menjadi string tunggal

keluaran >> "3456766"

Dalam contoh saya, saya perlu output sebagai 209-356-6788 jadi saya gunakan ganti

  $('#help_number').keyup(function(){
    $(this).val($(this).val().match(/\d+/g).join("").replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3'))
  });
Vinay Kumar
sumber
0
changeStrangeDate(dateString: string) {
var sum = 0;
var numbers = dateString.match(/\d+/g);
if (numbers.length > 1) {
  numbers.forEach(element => {
    sum += parseInt(element);
  }
  );
}
console.log(new Date(sum).toDateString());
return new Date(sum).toUTCString();

}

Anda dapat melakukannya seperti itu dan kemudian memanggil fungsi di mana Anda perlu, dengan parameter.

this.changeStrangeDate('/Date(1551401820000-0100)/');
Irakli Kardava
sumber
0

Anda dapat melakukan fungsi seperti ini

function justNumbers(string) 
    {
        var numsStr = string.replace(/[^0-9]/g,'');
        return parseInt(numsStr);
    }
Danielle Cohen
sumber