2015-02-02 3 views
-2

사용자가 'dev'또는 'development'단어를 입력했는지 테스트하기 위해 Javascript를 사용하고 있습니다.정규식 대괄호가 "or"문에서 작동하지 않는 이유는 무엇입니까?

/^[dev|development]$/.test(user_input);을 사용하여 잘못된 false를 반환했습니다.

현재 올바른 결과를 반환하는 /^dev$|^development$/.test('developmentt');을 사용하고 있습니다.

하지만 대괄호 주석을 사용하여 잘못된 결과가 나타나는 이유는 무엇입니까?

Here's a demo

+0

은 []'읽기에 대한'.They 당신이 원하는 또는 당신이 – vks

+0

기본 RE를 인식하지 무엇입니까. 그러나 정말로 대괄호를 사용하고 false negative를 얻고 싶지 않다면 대신'^ [dev | development] + $'를 사용하십시오 (그리고 false positive를 얻습니다). – usr2564301

+0

@Jongware 좋은데! 그러나 차이점은 무엇입니까? – hitautodestruct

답변

2

대괄호 단어에 대한 올바른 수행하는 사람 또는 작동하지 않습니다. 당신은 |

/^(dev|development)$/.test(user_input); 

또는

/^dev(?:elopment)?$/.test(user_input); 

또는 기능은 문자 클래스 내부에 존재 각각의 모든 문자에 적용로 구분 () 안에 넣어해야합니다. 그래서이 [dev|development] 일치 d 또는 e 또는 v 또는 | 또는 d 또는 e, .....

+0

쿨! 그런데 왜 그런가요? 둘의 차이점은 무엇입니까? – hitautodestruct

+0

사소한 설명 : OR 모음의 사용 자체는 괄호가 필요하지 않습니다. OR 바는 괄호가있는 경우 (다른 모든 regex 명령처럼) 가장 안쪽의 그룹에서 작동하고 그렇지 않은 경우 전체 정규식에서 작동합니다. – usr2564301