나는 다음과 같은 날짜 시간 문자열을 가지고 있는데 길이가 1 인 숫자와 일치하지 않는 2020-5-1 1:2
패턴 (\W)(\d{1})
을 사용했습니다 5,1,1,2
. 이 데모 는 패턴 이 모든 경기에서 그룹 2에서 패턴을 잡는 데 성공했음을 보여줍니다.
Javascript의 String replace
메소드를 사용 하여 datetime 샘플 문자열을로 설정하려고했습니다2020-05-01 01:02
. 에서 이 jsbin 다음 코드를 실행합니다 :
var txt = '2020-5-1 1:2'
var output = [];
output[0] = txt.replace(/(\W)(\d{1})/gi,'0$1');
output[1] = txt.replace(/(\W)(\d{1})/gi,'0$2');
console.log(output);
// The output: ["20200-0-0 0:", "202005010102"]
첫 번째 출력 항목 0
에서 일치 항목 을 추가 하는 대신 예기치 않은 동작 이 발생하여 0
! 이 문제를 어떻게 해결할 수 있습니까?
대체 패턴에는 단일 플레이스 홀더 만 사용했지만 정규식 패턴에서는 캡처 그룹이 두 개인 서브 스트링 두 개를 소비했기 때문에 하나가 유실되었습니다.
0
한 자릿수 앞에 추가하려면 다음을 사용할 수 있습니다
txt.replace(/\b\d\b/g,'0$&')
txt.replace(/(^|\D)(\d)(?!\d)/g,'$10$2')
txt.replace(/(?<!\d)\d(?!\d)/g,'0$&') // With the ECMAScript2018+
여기에서 \b\d\b
ASCII 문자, 숫자 또는 앞에 오지 않는 숫자를 찾습니다 _
. 대체는 0
및 전체 일치 값 $&
입니다.
(^|\D)(\d)(?!\d)
문자열 의 패턴 캡처 시작 또는 숫자가 아닌 문자가 그룹 1로 시작된 다음 그룹 2에서 숫자가 캡처됩니다. 그런 다음 (?!\d)
오른쪽에 즉시 숫자가 없는지 확인하십시오. 대체는 $10$2
, 그룹 1 값 0
및 그룹 2 값입니다.
(?<!\d)\d(?!\d)
패턴이없는 다른 자리 묶인 자리수 일치하고 교체가 케이스 (1)와 동일하다.
JS 데모 :
var txt = '2020-5-1 1:2';
console.log( txt.replace(/\b\d\b/g,'0$&') )
console.log( txt.replace(/(^|\D)(\d)(?!\d)/g,'$10$2') )
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다