자바 스크립트를 사용하여 숫자 만 반환하는 정규식


129

"something12"또는 "something102"와 같은 문자열이있는 경우 자바 스크립트에서 정규식을 사용하여 숫자 부분 만 반환하는 방법은 무엇입니까?

답변:


226

정규식 :

var numberPattern = /\d+/g;

'something102asdfkj1948948'.match( numberPattern )

내부에 '102'와 '1948948'이라는 두 개의 요소가 포함 된 배열을 반환합니다. 원하는대로 작동하십시오. 일치하지 않으면 null을 반환합니다.

그들을 연결하려면 :

'something102asdfkj1948948'.match( numberPattern ).join('')

복잡한 소수를 다루지 않는다고 가정하면 충분하다고 생각합니다.


3
실수. nit-picky는 아니지만 객체가 아닌 배열을 반환합니다 (적어도 크롬에서는).
Maus

14
모든 배열은 객체입니다.
meder omuraliev

6
@MuhammadUmer-사용해 보셨습니까?
meder omuraliev

2
@Onza 당신은 전에 백 슬래시를 누락 d때문에,.match(/\d+/g)
MEDER을 omuraliev

10
@MuhammadUmer, @meder : 두 분은 힘을 parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
합쳐야합니다

199

숫자가 아닌 모든 문자 ( \D또는 [^0-9])를 제거 할 수도 있습니다 .

let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');

console.log(word_Without_Numbers)


OP는 문자열이 아닌 "숫자 부분 만"원하는 것을 제외하고는.
Scott Fraley

24

소수점 이하 자릿수와 빼기 부호가있는 숫자의 경우이 코드를 사용합니다

 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"]

업데이트 :-7/9/2018

정규식을 시각적으로 편집 할 수있는 도구 인 JavaScript Regular Expression Parser & Visualizer를 찾았습니다 .

최신 정보:

디버거 정규 표현식을 사용할 수있는 또 하나의 방법이 있습니다 : 온라인 정규식 테스터 및 디버거 .

최신 정보:

다른 하나는 RegExr 입니다.

최신 정보:

정규 표현식 정규 표현식 Pal .


소수와 음수로 작동하는 완벽하고 유일한 솔루션
ArmaGeddON

17

숫자 만 원하는 경우 :

var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714

이제 숫자가 합쳐집니다.


9

문자열에서 숫자를 얻고 싶다고 생각합니다. 이 경우 다음을 사용할 수 있습니다.

// 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

1
명확하게하기 위해 get_numbers/1숫자가 아닌 문자열 배열을 반환합니다. 예를 들어, 다음을 반환합니다. * ["102"]* ["102", "12"]* null
Sơn Trần-Nguyễn

2

주어진 답변이 실제로 귀하의 질문과 일치하지 않으므로 후행 번호 를 의미합니다 . 또한 문자열을 다시 얻는다는 것을 기억하십시오. 실제로 숫자 가 필요한 경우 결과를 캐스트하십시오.

item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);

웹 페이지에서 숫자 항목 ID를 처리하는 경우 코드에서 유용하게을 수락하여을 (또는 첫 번째 상위) Element에서 숫자를 추출 할 수 있습니다 . 당신이 편리 하다면 , 당신 도 그로부터 얻을 수 있습니다.ididEventElement


이것은 멋진 답변이지만 다른 답변은 "[질문과 일치하지 않습니다"라고 생각하지 않습니다. 실제로 다른 답변은 더 다양합니다. 그들은 중간의 숫자뿐만 아니라 후미의 숫자와 함께 작동합니다. OP가 후행 번호로만 작업하기를 원한다고 가정하는 것은 약간의 추측입니다.
Xandor


2

Chen Dachao의 IMO # 3 답변은 모든 종류의 숫자를 캡처하려는 경우 올바른 방법이지만 다음과 같이 정규 표현식을 단축 할 수 있습니다.

/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g

에:

/-?\d*\.?\d+/g

예를 들어이 코드는 다음과 같습니다.

"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)

이 배열을 생성합니다.

["217","255","0","0","-0.8","-255","0","0","0","70.71"]

나는 정규 표현식을 완전히 테스트하고 여기에서 스크롤 할 필요가 없도록 MDN 선형 ​​그라디언트 예제를 도살했습니다. 음수, 소수, deg 및 %와 같은 단위 접미사, 일관성없는 쉼표 및 공간 사용, 텍스트 "lin-grad.ient"에 추가 점 / 마침표 및 하이픈 / 대시 문자 등의 모든 가능성을 포함 시켰습니다. ". 빠진 것이 있으면 알려주세요. 내가 처리 할 수없는 유일한 것은 "0..8"과 같이 잘못 구성된 10 진수입니다.

실제로 숫자 배열을 원하면 동일한 배열의 코드로 전체 배열을 변환 할 수 있습니다.

array = whatever.match(/-?\d*\.?\d+/g).map(Number);

CSS 함수를 파싱하는 내 특정 코드는 점 / 마침표 문자의 숫자가 아닌 사용에 대해 걱정할 필요가 없으므로 정규 표현식이 더 간단해질 수 있습니다.

/-?[\d\.]+/g

2

split 및 regex 사용 :

    var str = "fooBar0123".split(/(\d+)/);
    console.log(str[0]); // fooBar
    console.log(str[1]); // 0123

1

@Syntle의 답변에 따라 숫자가 아닌 문자 만 있으면을 얻을 수 있습니다 Uncaught TypeError: Cannot read property 'join' of null.

일치하는 것이 없으면 빈 문자열을 반환하면 오류가 발생하지 않습니다.

('something'.match( /\d+/g )||[]).join('')


0

점 / 쉼표로 구분 된 숫자도 원하면 다음을 수행하십시오.

\d*\.?\d*

또는

[0-9]*\.?[0-9]*

https://regex101.com/ 을 사용하여 정규식을 테스트 할 수 있습니다 .


0

다른 솔루션에는 있지만 유효성 검사가 거의없는 모든 것

// value = '675-805-714'
const validateNumberInput = (value) => { 
    let numberPattern = /\d+/g 
    let numbers = value.match(numberPattern)

    if (numbers === null) {
        return 0
    }  

    return parseInt(numbers.join([]))
}
// 675805714
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.