문자열에서 숫자 추출 (“get”)


354

`# box2 '와 같은 자바 스크립트에 문자열이 있으며'2 '를 원합니다.

시도 :

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

여전히 경고에서 # box2를 반환합니다. 어떻게 작동합니까?

끝에 부착 된 길이 번호를 수용해야합니다.


1
당신은 단순히 이렇게 할 수 있습니다. 잘 작동합니다. var thestring = $ (this) .attr ( 'href'); var thenum = parsefloat (thestring); 경보 (thenum);
Vivek Shukla

1
이 코드는 나에게 잘 작동하지만 한 경우에는 '2.5 / 마일'이라는 문자열이 있으며 2.5에서 이것을 추출하고 싶습니다. 위의 코드는 2.5 대신 25를 제공합니다
Bijay Singh

답변:


578

이 특정 예에서는

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

일반적인 경우 :

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

이 답변이 어떤 이유로 인기를 얻었으므로 여기에 보너스가 있습니다 : 정규식 생성기.

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, '')2아니 어야합니다 2_col3.
Shiplu Mokaddim 1

2
@ shiplu.mokadd.im : #box2_col3질문에 대한 언급이 없습니다 .
georg

1
#box2_col3.에 대한 참조가 없습니다 . 그러나 \w)(.+$)숫자 뒤에 다른 문자가 있음을 분명히 나타내는 정규식 OP ( )를 참조하십시오 .
Shiplu Mokaddim

3
이 경우 끝 전에 숫자가 있으면 패턴도 실패합니다.
Shiplu Mokaddim 1

2
다음 replace을 사용하여 선행 숫자로 작업 할 수 theString.replace(/^.*\D+/g, '');있지만 shiplu.mokadd.im의 솔루션이 더 좋습니다.
LandonSchropp

225

다음을 시도해야합니다.

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

결과

1234561613213213

1
좋은 대답이지만 숫자 세트를 별도로 원한다면 어떻게해야합니까? 1234, 5616133 ...
Amar Singh

또는 한 - 라이너 + 정수로 구문 분석 :parseInt(txt.match(/\d/g).join(''), 10)
루카스 Liesis

" $ 20.0 ".match(/\d/g).join('') => "200"(단지 말함)
vsync

90

나는이 정규 표현이 당신의 목적에 도움이 될 것이라고 생각합니다 :

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

txt당신의 줄은 어디에 있습니까 ?

기본적으로 숫자가 아닌 것을 버립니다.

나는 이것을 사용하여 동일한 것을 달성 할 수 있다고 생각합니다.

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

1
/[^0-9]/g가독성 +1 또한 여기에 대부분의 답변과 함께 사용됩니다 : stackoverflow.com/q/1862130/1066234
Kai Noack

58

다음을 시도하십시오. string.replace(/[^0-9]/g, '');이것은 숫자가 아닌 모든 문자를 삭제하고 문자열에는 숫자 만 남겨 둡니다.

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
이것은 전역이 아닌 모든 숫자를 대체하고 btw /[^0-9]/g를로 대체 할 수 있기 때문에 허용되는 대답보다 낫습니다 /[^\d]/g.
CPHPython

52

일치 기능을 사용합니다.

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

jsfiddle


1
또한 단항 '+'를 추가하여 정수로 만들 수 있습니다. var thenum = + thestring.match (/ \ d + $ /) [0];
Sergey Onishchenko

1 자리 숫자 이상에서 작동하지 않는 것 같습니다. (질문은 1 자리 숫자에 대한 것이지만 숫자가 10보다
Felix

@nissemand 추측하지 마십시오 . 자신을보십시오. 심지어 당신은 바이올린을 보지 못했습니다.
Shiplu Mokaddim

이거 너무 좋아. 요소를 터치하거나 수정하지 않고 숫자를 변수로 추출하는 가장 간단한 방법입니다. 나는 문자열 내부에서 많은 우연의 일치에 대해 각각의 콤보를 고맙게 생각합니다. 즉, 문자열 12a55는 마지막 숫자를 모두보고하지는 않습니다.
m3nda

1
@YevgeniyAfanasyev 안됩니다. 원래 질문을 확인하십시오. 특히 마지막 줄. 숫자는 끝에 있어야합니다.
Shiplu Mokaddim

33

이 코드와 함께 위에서 인용 한 모든 조합을 시도 하고 작동 시켰습니다. 유일한 문자열에서 작동했습니다->(12) 3456-7890

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

결과: "1234567890"

Obs : 그런 문자열이 attr에 있지는 않지만 해결책은 더 완벽하기 때문에 더 좋습니다.


str.match(/\d+/g).map(Number)배열을 반환하는 것이 더 나을 것이라고 생각합니다
Artem Bernatskyi

33

그리고 이것은 통화와 서식으로 가격을 추출하는 스 니펫입니다.

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

13

훌륭한 parseInt 메소드를 사용할 수 있습니다

선행 숫자를 숫자로 변환합니다.

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

18
이것은 숫자가 문자열의 시작 부분에있을 때만 작동합니다
Russj

2
그것의 반환 NaN
아메드 Syed


4

정규식을 사용할 수 있습니다.

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

경고 2입니다.


4
-1 여러 자리가 캡처되지 않고 경고에 배열을 사용하기위한
Shiplu Mokaddim

4

정규 표현식을 사용하면 문자열에서 숫자를 얻는 방법 (예 :

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

결과 myString는 " 24"

이 실행 코드의 예는 여기에서 볼 수 있습니다. http://ideone.com/iOCf5G


5
java! == javascript-replaceAll은 표준 Javascript에 없습니다. jQuery와 같은 일부 라이브러리에만 해당 방법이 있습니다. 앞으로는 분명히해야합니다.
Levi Roberts

3

밑줄 문자열 라이브러리를 다음과 같이 사용할 수 있습니다

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

_(href).strRight(common)

결과는 다음과 같습니다. 1

참조 : https://github.com/epeli/underscore.string

데모 :
http://jsfiddle.net/abdennour/Vyqtt/
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>

JS 코드 :

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

다음과 같이 접미사가있는 경우 :

href="box1az" 

다음 데모를 사용할 수 있습니다.

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

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

}

3

여기는 진흙이 있습니다. 데이터가 없는지 확인하는

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

이 단선 코드를 사용하면 오류없이 문자열의 첫 번째 숫자를 얻을 수 있습니다.

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

2

자바 스크립트 아래를 확인하십시오. 번호 만 얻을 수 있습니다.

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

출력 : 1234567789


2

정규식을 사용하여 문자열에서 숫자를 추출 할 수 있습니다.

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

출력 : 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

설명을 광고하십시오. 예를 들어 왜이 정규식을 사용합니까?
mentallurg 2016 년

1

이 답변은 대부분의 시나리오를 다룰 것입니다. 사용자가 전화 번호를 붙여 넣으려고 할 때이 상황에서

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

설명:

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

str.match(/\d+/g)

출력으로 문자열 배열을 제공합니다 >> ""34 ","56766 "]

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

join은 배열 데이터를 단일 문자열로 변환하고 연결합니다.

출력 >> "3456766"

내 예에서는 209-356-6788로 출력이 필요하므로 replace를 사용했습니다.

  $('#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();

}

그렇게하면 매개 변수를 사용하여 필요한 곳에서 함수를 호출 할 수 있습니다.

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

0

이런 기능을 할 수 있습니다

function justNumbers(string) 
    {
        var numsStr = string.replace(/[^0-9]/g,'');
        return parseInt(numsStr);
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.