2014-04-11 3 views
1

나는 자바 스크립트 정규 표현식의 초보자입니다. 내 프로젝트에서 자바 스크립트 정규식을 사용하여 웹 페이지의 필드 중 하나를 확인해야합니다. - 필드에는 ("/")을 제외한 특수 문자를 사용할 수 없습니다. --Also 필드에서 "/"로 시작하거나 "/"로 끝나는 단어는 허용하지 말아야하지만 "/"사이에 단어를 사용할 수 있습니다. - 하나 이상의 연속 된 슬래시를 허용해서는 안된다는 제한이 있습니다. --- 필드는 단일 문자를 전달할 수 있도록해야 사용할 수 있습니다뿐만 아니라자바 스크립트 정규식 그룹화

기본적으로 말은 다음과 같습니다 : -

data 
data/sdsd 
d/s/s/sss 

허용되지 않는 사람은 다음과 같습니다 -

/data 
or //data 
or data/ 
or data//// 
or data/////data 

I 비록 두 정규식의 1. (^[\w]+.*[^/]$) 즉, 허용 단어는 영숫자로 시작 &도 checkit은 "/"로 끝나는 단어를 허용해서는 안됩니다.

나는 좋은 정규 표현식이 아니라는 것을 알고있다. (그 사이에 "/"의 멀티플 숫자도 역시 특수 문자가 처리되지 않는다.) 그러나 주된 문제는 그것이 단일 문자를 거부한다는 것이다. 하나는 내가 alphanumberic 문자 반복의 수를 허용하는 정규식을 만들고 싶었하지만 경우

  1. [\w]+([/][\w]+)* 즉, 그것이 큰 도움이 될 것입니다, 하나의 문자를 허용하려면이 정규식을 수정하는 나를 도울 수 슬래시가 나오면 영숫자가 오는지 확인하십시오.

    /S,/SSS/dadada

그리고 메타 - : 내가 ([/][\w]+)*가 허용하는 그룹으로 역할을 할 생각 있도록 & 나는 "()는"그룹에 문자를 사용하는 것이 인터넷에서 읽은 "*"은 여러 번 반복 될 것입니다. 그러나이 문제는 그룹화하지 않고 [/][\w]+인데, "/"으로 끝나는 단어를 허용하고 있습니다. 누구든지이 도움을받을 수 있다면 제게 큰 도움이 될 것입니다. Thnaks 사전에 !!

+0

읽기 쉽도록'\'\''코드 블록을 사용하십시오. – Sam

답변

4

이것은 아마도 가장 효율적은 아니지만 시작해야합니다. Javascript의 정규식 엔진은 lookbehind를 지원하지 않으므로 좀 더 복잡해집니다. (/ 구분 기호)

^([a-z]+([a-z]|\/(?![\/]))*[a-z]|[a-z])$ 
또한 아마도 대소 문자를 구별 수정을 사용하는 것이 좋습니다

http://regex101.com/r/iA9kC6

, 그래서 결과는 다음과 같습니다

/^([a-z]+([a-z]|\/(?![\/]))*[a-z]|[a-z])$/i 
+0

좋은 작품 +1, 왜 반복되는'/'를 제거하려고 할 때 부정적인 모양을 잊어 버렸습니까? – Sam

+0

빠른 답장을 보내 주셔서 감사합니다. 나는 또는 통신 수를 생각하지 않았다. 당신이 설명 할 수 있니? 이 정규식을 허용하는 방법을 이해하고 싶습니다. – Caesar

+0

regex101은 설명 필드에서 설명 할 수있는 것보다 더 잘 설명 할 수 있습니다.) 간단히 말하자면'(one | ortheother) '와 일치합니다 – brandonscript

1

내가 도움이 될 것이라고 생각 당신의 문제를 해결하십시오. 그룹의 게으른 한정 기호와 모든 것을 고정시키는 데 도움이되는 시작 및 끝 참조가 작동하는 것처럼 보입니다.

/^\w([//]?\w+)*?$/ig 
+0

이것은 좋은 일입니다. 그러나 OP는 문자 만 필요하다고 생각합니다 -'\ w'는 숫자와 밑줄을 포함합니다. 문자 클래스에서'// '를 두 번 할 필요는 없지만 슬래시를 구분자로 사용하기 때문에 이스케이프해야한다 :'[\ /]'. '*'는 게으르다. 왜냐하면'*'는 게으르다. http://regex101.com/r/bO9kE4 – brandonscript

+0

@remus : "... *''게으른 어쨌든." - 아니야. 욕심이 우리가 원하는 행동이기 때문에 그것은'? '을 필요로하지 않는 것이 옳습니다. 당신은 다른''을 없애야 만하지만 다른 이유가 있습니다. 첫 번째'\ w +'('+'에주의하십시오, 다른 오류입니다)에 일치하는 것이 없으면 다음은'/'또는 문자열의 끝이 아니므로 일치 시도가 실패해야합니다. 둘러싸는 그룹은 선택 사항이지만 그룹 내에서 슬래시가 필요합니다. –

0

이 문제를 해결해야합니다

^(\w(([/]?\w)*\w)?)$ 

정규 표현식은 말한다 :

일치가 항상 단어 문자로 시작해야합니다.

1 문자 이상인 경우 마지막 문자도 단어 문자 여야합니다. -의 사이

모든 chacaters는 하나 짧은 단어 문자, 또는 단 하나의 단어 문자, 다음에 / : ([/]?\w)*

더하기를 추가하면 약간의 성능 향상을 당신에게 줄 수 있습니다

^(\w(([/]?\w+)*\w)?)$