2011-03-12 4 views
1

나는 내 정규 표현식에 대한 지식을 확대하기 위해 노력하고있어하지만 난 사실 다음 반환 왜 단서가 없다 : 만 정확히 두 개의 대문자 일치를 의미한다이 정규 표현식이 왜 일치합니까?

/[A-Z]{2}/.test("ABC") 
// returns true 

내가 명시 적 표현에 {2}을 넣어. http://www.regular-expressions.info/repeat.html에 따르면

: 쉼표 및 최대 모두 생략

정확하게 분 배를 토큰을 반복 엔진을 알려줍니다.

여기 오해는 무엇입니까?

답변

6

^$을 사용하여 정규 표현식을 앵커하여 문자열의 시작과 끝을 지정해야합니다.

/^[A-Z]{2}$/.test("ABC") 
// returns false 

현재 정규식은 문자열의 "AB"부분과 일치합니다.

1

ABC의 처음 두 글자 인 AB과 일치합니다.

가 전체 경기를하려면 ^$ 앵커를 사용

/^[A-Z]{2}$/.test("ABC") 

이 정확히 2 대문자의 전체 문자열과 일치합니다.

1

문자열의 일부가 아닌 전체 문자열 만 일치 시키려면 ^[A-Z]{2}$을 사용해야합니다. 귀하의 샘플에서 정규 표현식은 AB과 일치합니다. 실제로 행의 대문자 2 개입니다.

1

정규 표현식에 ^$ 개의 문자가 없습니다. 문자열의 시작 부분과 문자열의 끝 부분입니다. 그들은 귀하의 정규 표현식이 누락되어 있기 때문에 "2 문자"가 아니라 "2 문자"라고하므로 문자열의 "AB"또는 "BC"와 일치합니다.

1

의사가 거짓말하지 않습니다 :)

쉼표와 max를 모두 생략하면 토큰을 정확하게 분 단위로 반복하도록 엔진에 알립니다.

그것은 내가 사용하는 경우 정확히 2를 의미 분 시간하지 최대 시간

+1

정확하게 분 배,'{2}'분 여기에 2 말합니다. 그게 맞지 않아? – pimvdb

+1

아니요, 게시 한 정규식은 적어도 2 개의 연속 대문자가 포함 된 모든 문자열과 일치하므로 테스트 문자열의 경우 AB와 BC가 각각 2 회 일치합니다. 여기에 몇 가지 정규식을 실행 해보십시오. http://www.rubular.com/ (멋진 정규 표현식 놀이터 : D) – Augusto

+0

아, 두 개의 대문자가 *있는 줄을 생각했습니다. – pimvdb

관련 문제