Trích xuất (Dịch get Nhận) một số từ một chuỗi


355

Tôi có một chuỗi trong javascript như `# box2 'và tôi chỉ muốn' 2 'từ nó.

Đã thử:

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

Nó vẫn trả về # box2 trong cảnh báo, làm thế nào tôi có thể làm cho nó hoạt động?

Nó cần phải chứa cho bất kỳ số chiều dài gắn vào cuối.


1
bạn chỉ có thể làm như thế này nó sẽ hoạt động tốt var thestring = $ (này) .attr ('href'); var thenum = parsefloat (thestring); cảnh báo (thenum);
Vivek Shukla

1
mã này hoạt động tốt với tôi nhưng trong một trường hợp, tôi có một chuỗi '2,5 / dặm' và tôi muốn trích xuất 2,5 trong số này. Mã trên cho tôi 25 thay vì 2,5
Bijay Singh

Câu trả lời:


578

Đối với ví dụ cụ thể này,

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

trong trường hợp chung:

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

Vì câu trả lời này đã trở nên phổ biến vì một số lý do, đây là một phần thưởng: trình tạo 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>


15
-1, "#box2_col3".replace( /^\D+/g, '')nên đã hiển thị 2, không 2_col3.
Shiplu Mokaddim

2
@ shiplu.mokadd.im: Tôi không thấy bất kỳ tài liệu tham khảo nào #box2_col3trong câu hỏi.
georg

1
Có không có tài liệu tham khảo #box2_col3. Nhưng hãy xem regex OP được sử dụng ( \w)(.+$)) cho biết rõ ràng có các ký tự khác sau số.
Shiplu Mokaddim

3
trong trường hợp đó mô hình của bạn cũng thất bại nếu có số trước khi kết thúc.
Shiplu Mokaddim

2
Bạn có thể thực hiện replacecông việc với các số dẫn đầu bằng cách sử dụng : theString.replace(/^.*\D+/g, '');, nhưng giải pháp của shiplu.mokadd.im là tốt hơn.
LandonSchropp

225

Bạn nên thử như sau:

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

kết quả

1234561613213213

1
Câu trả lời hay nhưng nếu tôi muốn tập hợp các số riêng biệt. tức là 1234, 5616133 ...
Amar Singh

Hoặc một lớp lót + phân tích cú pháp thành số nguyên:parseInt(txt.match(/\d/g).join(''), 10)
Lukas Liesis

" $ 20.0 ".match(/\d/g).join('') => "200" (chỉ cần nói)
vsync

91

Tôi nghĩ rằng biểu thức thường xuyên này sẽ phục vụ mục đích của bạn:

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

Trong trường hợp txtlà chuỗi của bạn.

Về cơ bản, nó xé toạc mọi thứ không phải là chữ số.

Tôi nghĩ bạn cũng có thể đạt được điều tương tự bằng cách sử dụng điều này:

var num = txt.replace(/\D/g,'');

1
/[^0-9]/g+1 cho khả năng đọc. Cũng được sử dụng với hầu hết các câu trả lời ở đây: stackoverflow.com/q/1862130/1066234
Kai Noack

58

Hãy thử làm như sau: string.replace(/[^0-9]/g, '');Thao tác này sẽ xóa tất cả các ký tự không có chữ số, chỉ để lại các chữ số trong chuỗi

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, ''));


2
Điều này tốt hơn câu trả lời được chấp nhận, vì nó thay thế tất cả các số không trên toàn cầu và btw, /[^0-9]/gcó thể được thay thế bằng /[^\d]/g.
CPHPython

52

Sử dụng chức năng khớp.

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

jsfiddle


1
Ngoài ra, bạn có thể thêm unary '+' để biến nó thành số nguyên var thenum = + thestring.match (/ \ d + $ /) [0];
Serge Onishunn

Tôi đoán điều này không làm việc cho số> 1 chữ số? (Tôi hiểu câu hỏi dành cho các số có 1 chữ số, nhưng tôi đang xem các số có thể> 10.)
Felix

@nissemand Đừng đoán . Hãy tự thử. Ngay cả bạn đã không nhìn thấy fiddle.
Shiplu Mokaddim

Thích cái này. Một cách đơn giản nhất để trích xuất số thành một biến mà không cần chạm hoặc sửa đổi phần tử. Tôi sẽ đánh giá cao một kết hợp với mỗi cho một sự trùng hợp ngẫu nhiên trong một chuỗi. tức là chuỗi 12a55 báo cáo số cuối cùng, không phải tất cả.
m3nda

1
@YevgeniyAfanasyev thì không nên. Kiểm tra câu hỏi ban đầu. Đặc biệt là dòng cuối cùng. Số nên ở cuối.
Shiplu Mokaddim

33

Đã thử tất cả các kết hợp được trích dẫn ở trên với Mã này và làm cho nó hoạt động, là kết hợp duy nhất hoạt động trên chuỗi đó ->(12) 3456-7890

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

Kết quả: "1234567890"

Quan sát: tôi biết rằng một chuỗi như thế sẽ không nằm trên attr nhưng dù sao đi nữa, giải pháp tốt hơn, bởi vì nó hoàn chỉnh hơn.


tôi nghĩ tốt hơn là str.match(/\d+/g).map(Number)nó sẽ trả về một mảng
Artem Bernatskyi

33

Và đây là đoạn trích trích giá bằng tiền và định dạng:

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

13

bạn có thể sử dụng phương pháp parseInt tuyệt vời

nó sẽ chuyển đổi các chữ số hàng đầu thành một số

parseInt("-10px");
// will give you -10

18
điều này chỉ hoạt động khi số nằm ở đầu chuỗi
Russj

2
nó trở lại NaN
Ahmed Syed


4

Bạn có thể sử dụng biểu thức thông thường.

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

Điều đó sẽ cảnh báo 2.


4
-1 nhiều chữ số sẽ không được ghi lại và để sử dụng mảng trong cảnh báo
Shiplu Mokaddim

4

Với Biểu thức chính quy , cách lấy số từ Chuỗi, ví dụ:

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

kết quả myStringlà " 24"

bạn có thể xem ví dụ về mã đang chạy này tại đây: http://ideone.com/iOCf5G


5
java! == javascript - thayTất cả không tồn tại trong javascript tiêu chuẩn. Chỉ một số thư viện như jQuery có phương thức đó. Trong tương lai, bạn nên làm rõ.
Levi Roberts

3

Bạn có thể sử dụng Thư viện chuỗi gạch dưới như sau

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

_(href).strRight(common)

kết quả sẽ là: 1

Xem: https://github.com/epeli/underscore.opes

DEMO:
http://jsfiddle.net/abdennour/Vyqtt/
Mã 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>

Mã JS:

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

nếu bạn có hậu tố như sau:

href="box1az" 

Bạn có thể sử dụng bản demo tiếp theo:

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

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

}

3

Đây là một solt. kiểm tra không có dữ liệu

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');
}

2

Sử dụng mã một dòng này để lấy số đầu tiên trong chuỗi mà không gặp lỗi:

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

2

vui lòng kiểm tra bên dưới javaScripts, ở đó bạn chỉ có thể nhận được số

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

đầu ra: 1234567789


2

Bạn có thể trích xuất số từ một chuỗi bằng biểu thức regex:

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

đầu ra: 25933473


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

Quảng cáo một lời giải thích. Ví dụ tại sao bạn sử dụng cụ thể là regex này.
mentallurg

1

Câu trả lời này sẽ bao gồm hầu hết các kịch bản. Tôi có thể gặp tình huống này khi người dùng cố gắng sao chép dán số điện thoại

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

Giải trình:

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

str.match(/\d+/g)

Nó sẽ đưa ra một chuỗi các chuỗi như đầu ra >> ["34", "56766"]

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

tham gia sẽ chuyển đổi và nối dữ liệu mảng đó thành một chuỗi

đầu ra >> "3456766"

Trong ví dụ của tôi, tôi cần đầu ra là 209-356-6788 vì vậy tôi đã sử dụng thay thế

  $('#help_number').keyup(function(){
    $(this).val($(this).val().match(/\d+/g).join("").replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3'))
  });

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();

}

Bạn có thể làm như vậy và sau đó gọi hàm ở nơi bạn cần, với tham số.

this.changeStrangeDate('/Date(1551401820000-0100)/');

0

Bạn có thể làm một chức năng như thế này

function justNumbers(string) 
    {
        var numsStr = string.replace(/[^0-9]/g,'');
        return parseInt(numsStr);
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.