2013-07-19 6 views
2

안녕의 내가이 문자열 있다고 가정 해 봅시다 :자바 스크립트 정규식 -의 부정 (:)

var text = "Jackie Chan | Jack Frost | Capt.Jack Sparrow" 

내가 잭 프로스트를 제외한 모든 /Jack/을 찾으려합니다.

나는 쉽게 ?!를 사용하여이 작업을 수행 할 수 있지만,

text.match(/[^\s]*Jack[^\s]*(?!\sFrost)/g); 
// Result: ['Jackie', 'Capt.Jack'] 

// I want the result to be ['Jackie Chan', 'Capt.Jack Sparrow'] 

그래서 나는 기본적으로 ?:의 부정을 필요로하는 성을 포함하지 않습니다. 그런 것이 있습니까?

다른 잭을 추가하면 일치하지 않기 때문에 (?:Chan|Sparrow)을하고 싶지 않습니다.

감사

답변

2

그냥 lookeahead 후 일치하는 계속 : 작동

text.match(/\S*Jack\S*(?!\s+Frost)\s+\S+/g) 
+0

안녕 감사합니다. 마지막 부분'(?! \ s + Frost) \ s + \ S +'에 대해 더 자세히 설명 할 수 있습니까? 그룹'()'이 발견되지 않으면 무시합니까? – hrsetyono

+1

예, lookeaheads는 "zero-width"이며 아무 것도 캡처하지 않습니다. – georg