2016-12-13 1 views
0

나는 다음과 같은 형식으로 입력 할 수있는 날짜 형식이 캡처 :비 캡처 그룹이 계속 입력

December, 13, 2016 
December , 13 , 2016 
December ,13 , 2016 
. 
. 
. 

그래서 내가 일치 모든 입력 이벤트를 캡처하려고를 결국 같은 결과를 얻을 수 있습니다 이 :

December 13 2016 

내 정규식은 다음과 같습니다

str.match([a-zA-Z]+(?: |,)*[0-9]{1,2}(?: |,)*[0-9]+$) 

이 신뢰 나, 나는 쉽고 신속 검색 시도 질문을 게시하기 전에 웹에 올리십시오. 어떤 제안이 어떻게 해결할 수 있습니까?

+2

''December, 13, 2016 ''문자열을''12 월 13 일의 2016 년 "'문자열로 변환 하시겠습니까? 왜 단지'.replace (/ [\ s,] +/g, "")'가 아닌가? –

+1

문자가 아닌 문자를 모두 바꾸려면 's.trim(). replace (/ \ W +/g, "")'(또는's.trim(). replace (/ [^ a-z0-9] +/gi, "")'). –

+0

@ DenysSeguret 글쎄, 그건 간단한 해결책이었다. 나는'/ g' 옵션을 잊어 버렸습니다. 귀하의 솔루션 또는 @ nu11p01n73R을 사용해야하는지 확인하겠습니다. 고맙습니다. – Luminance

답변

2

추출 할 부분을 캡처해야합니다. 예를 들어,

matches = "December ,13 , 2016".match(/([a-zA-Z]+)[ ,]*([0-9]{1,2})[ ,]*([0-9]+)$/) 
console.log(matches[1] + ' ' + matches[2] + ' ' + matches[3]) 
// December 13 2016 
  • ([a-zA-Z]+)

    matches[1]에 월 이름을 캡처합니다.
  • ([0-9]{1,2}) 날짜를 캡처합니다.
  • ([0-9]+) 올해를 캡처합니다.
  • [ ,]*(?: |,)과 동일하지만 문자 클래스를 사용하는 그룹이 없습니다.
+0

글쎄, 내 모든 문제를 해결할 수 있다고 생각합니다. @ DenysSéguret도 큰 제안을했습니다. 어떤 솔루션이 가장 적합한 지 확인할 수 있습니다. 오늘 아침 내 마음을 풀어 줘서 고마워. – Luminance

+0

@Luminance 오신 것을 환영합니다. :) 만약 문자열에 *** 달 이름의 날짜와 연도 만이 포함되었다고 확신한다면, 주석에서 언급 한대로'\ s'와','를 하나의 공백으로 바꿀 수 있습니다. – nu11p01n73R

관련 문제