2012-06-19 3 views
2

Safari 브라우저와 일치해야하지만 Chrome 브라우저에서는 Regex를 사용하지 않아야합니다. 나는 대개 정규식에 문제가 없지만 부정적인 look-aheads가 나를 여기저기서 가로 채고있다.Chrome 및 Safari 용 Regex Negative Lookahead

/(?!chrome)(safari)/i.test("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5"); 

왜 이것이 true을 반환하는지 알 수 없습니다.

+0

'크롬'과 다른 부분 사파리와 일치합니다. (정확하게 이해하면별로 의미가 없습니다.) – pimvdb

+0

흠, 아마 사용법을 잘못 해석했을 것입니다. 문자열 일치 사파리를 사용하려고하지만 문자열이 크롬과 일치하지 않는 경우에만 시도합니다. – dtbarne

+0

[Negative lookahead :] (http://www.regular-expressions.info/lookaround.html)'q (?! u)'는'u'가 뒤 따르지 않는'q'와 일치합니다. 그건 여기서 도움이되지 않을거야. 이 작업에는 실제로 부정적인 lookbehind가 필요합니다 (문자열에는 'Chrome'이 선행되지 않는 Safari가 포함됨). JS는 부정적 lookbehind를 지원하지 않습니다. –

답변

4

이것은

^(?!.*chrome).*(safari) 

BTW 자바 스크립트가 lookbehind 지원하지 않습니다 할 것입니다하지만 난 내다 아무 문제를 볼 수 없습니다.

은 당신이

(?!chrome)(safari) 

으로 말하는 것은 이해가되지 않습니다 문자열 "크롬"있을 수없는 (제로 폭이 너무의 이전 커서로 시작) "사파리"전에 그 권리입니다.

+0

내가 게시 한 코드는 샘플입니다. – dtbarne

+0

@dtbarne 알겠습니다. 내가 대답을 – buckley

+0

업데이트 그 작품, 고마워! 말이된다. 내 이해를 통해 본 또 다른 예. – dtbarne

관련 문제