2012-06-19 22 views
2

我需要匹配Safari瀏覽器,但不是使用一個正則表達式的Chrome瀏覽器。我通常對正則表達式沒有任何問題,但負面預測將我拖到這裏。Chrome和Safari的正則表達式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

你正在匹配一個不等於'chrome'的子串'safari'。 (如果我理解正確的話,這不是很有意義。) – pimvdb

+0

嗯,我可能會誤解使用。我試圖讓字符串匹配Safari,但只有當字符串不匹配鉻。 – dtbarne

+0

[Negative lookahead:](http://www.regular-expressions.info/lookaround.html)'q(?!u)'匹配'*',後面是'*',後面跟着'u'。這在這裏沒有幫助。你實際上需要一個負面的後臺來處理這個工作(字符串包含'Safari',而不是'Chrome'),但是JS不支持負向倒序。 –

回答

4

這將做到這一點

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

BTW JavaScript不支持回顧後,但我看到前瞻沒有問題。

你所說的與

(?!chrome)(safari) 

是「野生動物園」在此之前,正確的(零寬度,以S開始前的光標)不能有字符串「鉻」,這沒有任何意義。

+0

我在帖子中給出的代碼是一個示例。 – dtbarne

+0

@dtbarne我明白了。我更新了答案 – buckley

+0

這很有效,謝謝!說得通。我通過理解了解到的另一個例子。 – dtbarne