JavaScript를 사용하여 웹 페이지에 서식이 지정된 숫자를 표시해야합니다. 올바른 위치에 쉼표가 있도록 형식을 지정하고 싶습니다. 정규식으로 어떻게 이것을 할 수 있습니까? 나는 다음과 같은 것을 얻었습니다.
myString = myString.replace(/^(\d{3})*$/g, "${1},");
... 그리고 이것이 내가 생각하는 것보다 더 복잡하다는 것을 깨달았습니다. 몇 가지 검색을 수행했으며 이에 적합한 것을 찾는 데 어려움을 겪고 있습니다.
기본적으로 다음 결과를 원합니다 :
- 45는 45가됩니다
- 3856은 3,856이됩니다
- 398868483992는 398,868,483,992가됩니다
... 아이디어를 얻습니다.
- 답변 # 1
- 답변 # 2
숫자 서식은 한 줄의 코드로 우아하게 처리 할 수 있습니다.
이 코드는 Number 객체를 확장합니다. 사용 예는 다음과 같습니다.코드 :
Number.prototype.format = function () { return this.toString().split( /(?=(?:\d{3})+(?:\.|$))/g ).join( "," ); };
작동 방식
정규 표현식은 미리보기를 사용하여 문자열 내에서 소수점 이하 또는 문자열 끝이 나타날 때까지 오른쪽에서 유일한 것이 세 개 이상의 숫자 그룹 인 위치를 찾습니다. 와이즈 비즈 해당 지점의 문자열을 배열 요소로 나눈 다음.split()
이러한 요소를 쉼표로 구분하여 문자열로 다시 병합합니다.문자를 제거하지 않고 문자열을 나누려면 실제 문자와 일치하지 않고 문자열 내에서위치를 찾는 개념이 중요합니다.
사용 예 :
.join()
로캘 인식 버전 :
var n = 9817236578964235; alert( n.format() ); // Displays "9,817,236,578,964,235" n = 87345.87; alert( n.format() ); // Displays "87,345.87"
필요한 경우가 아니라면 첫 번째 버전의 단순함을 선호합니다.
- 답변 # 3
// 소수를 고려할 수도 있습니다
Number.prototype.format = function () { if ((1.1).toLocaleString().indexOf(".") >= 0) { return this.toString().split( /(?=(?:\d{3})+(?:\.|$))/g ).join( "," ); } else { return this.toString().split( /(?=(?:\d{3})+(?:,|$))/g ).join( "." ); } };
var n = 10000000000.34;
n.commas () = 반환 값 : (String) 10,000,000,000.34
- 답변 # 4
정규식을 원한다면 while 루프에서 두 개를 사용할 수 있습니다 :
Number.prototype.commas= function(){ var s= '', temp, num= this.toString().split('.'), n=num[0]; while(n.length> 3){ temp= n.substring(n.length-3); s= ','+temp+s; n= n.slice(0, -3); } if(n) s= n+s; if(num[1]) s+='.'+num[1]; return s; }
그리고 화려하고 싶다면 소수점으로도 숫자를 지정할 수 있습니다 :
while(num.match(/\d{4}/)) { num = num.replace(/(\d{3})(,\d|$)/, ',$1$2'); }
수정 :
2 개의 정규 표현식으로 루프, 분할, 조인 등을 사용하지 않고도이 작업을 수행 할 수 있습니다.
while(num.match(/\d{4}(\,|\.)/)) { num = num.replace(/(\d{3})(,\d|$|\.)/, ',$1$2'); }
남은 자릿수가 3으로 나눌 수있는 경우 첫 번째 정규 표현식은 첫 번째 1 또는 2 자리 뒤에 쉼표를 넣습니다. 두 번째 정규 표현식은 나머지 3 자리 그룹마다 쉼표를 표시합니다.
이것은 소수로는 작동하지 않지만 양의 정수와 음의 정수에는 효과적입니다.
테스트 출력 :
num = num.replace(/(\d{1,2}?)((\d{3})+)$/, "$1,$2"); num = num.replace(/(\d{3})(?=\d)/g, "$1,");
- 답변 # 5
누군가 Javascript RegExp에서는 룩 백이 불가능하다고 언급했습니다. 다음은 둘러보기 사용법 (lookahead and lookbehind)을 설명하는 훌륭한 페이지입니다.
http://www.regular-expressions.info/lookaround.html
45 3,856 398,868,483,992 635 12,358,717,859,918,856 -1,388,488,184
관련 자료
- python - 정규 표현식을 사용하여 특정 단어 앞의 숫자 추출
- 자바 스크립트 (Vuejs)를 사용하여 특정 조건에서 숫자와 특정 문자 만 허용하는 정규 표현식
- json - 정수 형식 JavaScript 방법
- java - Hibernate HQL은 정규 표현식 패턴 매칭을 지원합니까?
- regex - Python에서 정규식을 사용하여 텍스트에서 목록 추출
- regex - 키 값 예제에 대한 정규식
- c# - 정규식 AlphaNumeric 쉼표는 무한 시간으로 구분됩니다
- r - 정규 표현식을 사용하여 문자열에서 "K"를 1000으로 바꾸는 방법
- r - 정규식으로 별표를 추출 할 수 없습니다
- regex - 정규식 몇 가지 가비지 데이터 후 IP와 포트를 일치시키는 방법
- javascript - $split () (jsonata) 함수에서 정규식이 "정규식이 길이가 0 인 문자열과 일치"를 제공하는 이유는 무엇입니까?
- javascript - 단어와 일치하지만 백틱 안에는 일치하지 않는 정규 표현식
- -2와 5 사이의 숫자 범위 검사를위한 정규식 정규식
- 자바 스크립트 - 매우 크고 작은 숫자를 고정 된 인간 readbale 문자열로 변환
- python - 케이스 내에있는 케이스와 일치하는 정규 표현식을 어떻게 얻습니까?
- wordpress - 정규식 리디렉션 코드를 수정하는 데 도움이 필요합니다
- 자바 스크립트에서 숫자 0으로 숫자를 구분하는 방법
- sql - Oracle의 정규식 기능을 사용하여 제목에 3 개 이상의 단어가 포함 된 모든 영화를 찾습니다
- html - test () 정규식은 true/false를 반환하지만 if/else 조건에서 사용하면 Javascript의 조건에 포함되지 않습니다
- c# - "wwwgooglecom"의 도메인 URL을 정규적으로 표현하는 것은 무엇입니까?
- javascript : JS-십진법 DE (독일)에 대한 정규식
- javascript : camelCaseText를 문장 케이스 텍스트로 변환
- javascript : SysUtils.Format 문자열을 정규식으로 변환 하시겠습니까?
- JavaScript에서 이메일 주소를 확인하는 방법
- javascript : 배열 /객체를 사용하지 않고 아포스트로피 모음을 해당 악센트 부호가있는 모음으로 바꾸는 방법
- javascript : 여러 문자열을 다른 여러 문자열로 교체
- javascript : 미리보기가있는 정규식이 예상대로 작동하지 않습니다.
- javascript : js에 대한 긍정적 인 lookbehind로 내 사례에 대한 좋은 대안 접근 방식이 있습니까?
이 작업은 단일 정규식으로 수행 할 수 있으며 반복 할 필요가 없습니다. 브라우저가 ECMAScript 2018을 지원하는 경우 간단히 둘러보기를 사용하여 올바른 위치에 쉼표를 삽입하면됩니다.
(?<=\d)(?=(\d\d\d)+(?!\d))
검색,
로 모두 대체이전 버전에서는 JavaScript가 lookbehind를 지원하지 않으므로 작동하지 않습니다. 다행히도 약간만 변경하면됩니다 :
(\d)(?=(\d\d\d)+(?!\d))
검색\1,
로 모두 대체자바 스크립트에서 다음과 같이 보입니다 :
설명 : 문자열의 현재 위치부터 3의 배수로 숫자를 일치시킬 수 있으며 현재 위치의 왼쪽에 숫자가 있다고 주장합니다.
도트의 오른쪽에 너무 많은 숫자가없는 한 소수점 이하 자릿수 (123456.78)로도 작동합니다 (그렇지 않으면 123,456.789,012를 얻습니다).
다음과 같이 Number 프로토 타입에서 정의 할 수도 있습니다.
그리고 다음과 같이 사용하십시오 :
크레딧 : Jeffrey Friedl, 정규 표현식 마스터하기, 3 위. 판, p. 66-67