2017-12-10 16 views
0
R.replace(/[0-9](?!([0-9]{4}))/g,'*','123456789'); 
yields 12345**** 

want to input 123-45-6789 and yield 123-45-**** 

Currently based on above it yields ***-**-**** 

이유가 없습니다. 시뮬레이션을 위해 rambda js를 사용하고 있습니다. http://ramdajs.com/docs/#replace마지막 4 개의 정규식 마스크

에 대한 정규식을 구성하는 데 도움이 필요합니다. 어떤 도움을 주신 경우

+4

정규식이 패턴을 감지하면 아무 것도 변경되지 않습니다. 당신은 프로그램과 함께해야합니다. – Juan

+1

정규 표현식은 발견 된 마지막 4 자리 숫자를 대체합니다. 1234-123-123456과 같이 적용하면 1234와 123뿐만 아니라 1233456에서도 일치하며 모두 4 자리 숫자를 바꿉니다. –

+0

안녕하세요 Juan과 Patrick, 이해합니다. 정규식에 이러한 패턴을 감지하려면 무엇을 입력해야합니까? 기본적으로 내가 달성하고 싶은 것은 123-45-6789 = 123-45 - ****, 123-45-67890 = 123-45-6 ****입니다. – raaone7

답변

1

현재 정규 표현식은 그 뒤에 네 자리 숫자가없는 숫자와 일치합니다. 문자열 123-45-6789의 모든 숫자에 해당하는 경우입니다.

작업중인 문자열의 마지막 네 문자가 항상 숫자 인 경우 정규식없이 쉽게이 작업을 수행 할 수 있습니다.

하지만 간단한 정규 표현식을 원하면 다음 정규 표현식으로 검색하고 ****로 바꿀 수 있습니다.

\d{4}$ 

문자열이 네 자리로 끝나지 않는 경우이 정규식은 일치하지 않습니다. 따라서 아래 예제의 처음 세 가지와 일치하고 마지막 세 가지는 실패합니다. 당신이 여섯 경우에 작동하는 정규식을 원하는 경우에

12-345-6789 
123-45-6789 
123456789 
1-2-3-4-5-6-7-8-9 
12-34-56-78-9 
123-456-789 

이를 사용할 수 있습니다

\d(?=(?:\D*\d){0,3} *$) 
0

R.replace을 (/ \ D (= (:? \ D * \ D) {0,3} $/g, '', '123-45-6789'); 완벽하게 일했습니다. 고마워. 프랜시스 명예!