source

javascript를 사용하여 숫자만 반환하는 Regex

manysource 2023. 8. 8. 21:42

javascript를 사용하여 숫자만 반환하는 Regex

만약 내가 "something12"나 "something102"와 같은 문자열을 가지고 있다면, 자바스크립트에서 정규식을 어떻게 사용하여 숫자 부분만 반환합니까?

정규식:

var numberPattern = /\d+/g;

'something102asdfkj1948948'.match( numberPattern )

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

연결하기

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

복잡한 십진법을 다루고 있지 않다고 가정하면, 이 정도면 충분할 것 같습니다.

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

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

console.log(word_Without_Numbers)

소수점 이하의 분수와 빼기 기호를 가진 숫자의 경우 다음 스니펫을 사용합니다.

const NUMERIC_REGEXP = /[-]{0,1}[\d]*[.]{0,1}[\d]+/g;

const numbers = '2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)

console.log(numbers); // ["2.2", "3.1", "4", "-7.6"]

업데이트: - 2018년 7월 9일

정규 표현식을 시각적으로 편집할 수 있는 도구인 JavaScript 정규 표현식 파서 및 비주얼라이저를 찾았습니다.

업데이트:

여기 디버거 regexp를 사용할 수 있는 또 다른 것이 있습니다.온라인 정규식 테스터디버거.

업데이트:

또 다른 것은 RegExr입니다.

업데이트:

레지엑스퍼레지엑스 팔.

숫자만 원하는 경우:

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

이제 숫자가 결합됩니다.

문자열에서 숫자를 가져오는 것이 좋습니다.이 경우 다음을 사용할 수 있습니다.

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

IMO Chen Dachao의 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 선형 그라데이션 예제를 수집하여 정규식을 완전히 테스트하고 여기서 스크롤할 필요가 없습니다."lin-gradent" 텍스트 내에 음수, 소수, deg 및 %와 같은 단위 접미사, 일관성 없는 쉼표 및 공백 사용, 추가 점/주기 및 하이픈/대시 문자 등의 모든 가능성을 포함했다고 생각합니다.제가 뭔가 부족한 게 있으면 알려주세요.제가 볼 수 있는 유일한 것은 "0.."과 같이 잘못 형성된 십진수입니다.8".

숫자 배열을 원하는 경우 전체 배열을 동일한 코드 행으로 변환할 수 있습니다.

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

CSS 함수를 구문 분석하는 나의 특정 코드는 점/주기 문자의 숫자가 아닌 사용에 대해 걱정할 필요가 없으므로 정규식은 훨씬 더 간단할 수 있습니다.

/-?[\d\.]+/g
var result = input.match(/\d+/g).join([])

분할 및 정규식 사용:

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

주어진 답은 실제로 에 오는 숫자를 암시하는 당신의 질문과 일치하지 않습니다.또한 문자열이 반환된다는 것을 기억하십시오. 실제로 숫자가 필요한 경우 결과를 캐스트:

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

웹 페이지에서 숫자 항목 ID를 다루는 경우 코드가 유용하게 사용할 수도 있습니다.Element에서 id (id); 만약 당신이 가지고 있습니다.Event편리하게, 당신은 아마도 그것을 얻을 수 있을 것입니다.Element그것으로부터도.

@Syntle의 답변에 따르면 숫자가 아닌 문자만 있는 경우 다음과 같이 표시됩니다.Uncaught TypeError: Cannot read property 'join' of null.

이렇게 하면 일치하는 항목이 없을 경우 오류가 발생하지 않고 빈 문자열이 반환됩니다.

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

정규식을 사용하여 문자열을 유효한 일반 또는 십진수로 변환하는 솔루션은 다음과 같습니다.

//something123.777.321something to 123.777321
const str = 'something123.777.321something';
let initialValue = str.replace(/[^0-9.]+/, '');
//initialValue = '123.777.321';

//characterCount just count the characters in a given string
if (characterCount(intitialValue, '.') > 1) {
 const splitedValue = intitialValue.split('.');
 //splittedValue = ['123','777','321'];
 intitialValue = splitedValue.shift() + '.' + splitedValue.join('');
 //result i.e. initialValue = '123.777321'
}

점/콤마로 구분된 숫자도 원하는 경우:

\d*\.?\d*

또는

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

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

다른 솔루션이 가지고 있는 모든 것, 그러나 약간의 검증만 있으면

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

원 라이너

십진수는 신경쓰지 않고 숫자만 있으면 됩니다. 이 라이너 하나가 오히려 우아하다고 생각합니다.

/**
 * @param {String} str
 * @returns {String} - All digits from the given `str`
 */
const getDigitsInString = (str) => str.replace(/[^\d]*/g, '');

console.log([
  '?,!_:/42\`"^',
  'A 0 B 1 C 2 D 3 E',
  ' 4 twenty 20 ',
  '1413/12/11',
  '16:20:42:01'
].map((str) => getDigitsInString(str)));

간단한 설명:

  • \d ~ ~ 9 합니다.
  • [^n] 것과일치가 아닌 합니다.n
  • *이전 버전의 0배 이상 일치(비숫자 블록 전체를 한 번에 일치시키는 시도입니다)
  • g마지막에 정규식이 다음과 같음을 나타냅니다.global는 첫 그 안에 있는 입니다. 문 자 열 에 발 서 에 멈 않 그 모 것 일 발 입 니 다 할 치 과 생 든 안 의 고 지 전 추 생 번 째 첫 대 해 는 리 우 그 리 고 ▁to ▁every ▁and 체 ▁that 다 니 ▁the ▁we 입 것 ▁will ▁string ▁occur ▁entire ▁not 할 ▁match ▁it 치

이러한 규칙은 숫자를 제외한 모든 규칙과 일치하며 빈 문자열로 대체합니다.따라서 숫자만 포함하는 문자열이 생성됩니다.

언급URL : https://stackoverflow.com/questions/1183903/regex-using-javascript-to-return-just-numbers