1

根据以下文档:https ://developers.google.com/chrome/mobile/docs/user-agent

这是适用于 iOS UA 字符串的 Chrome:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3

这是适用于 iOS UA 字符串的 Safari:

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3

据我所知,未来的区别在于 Chrome 包含“CriOS”。我希望能够区分这两种浏览器,因此开始使用正则表达式来做到这一点。

使用:

/Gecko\) (?!CriOS)/

我能够做到这一点,但我很偏执,因为我没有在表达式中包含 iPhone(也许这也会在 Android 等上触发)

我想编写以下正则表达式,它在以下情况下返回匹配项:

  1. 该字符串包含“iPhone”
  2. 该字符串不包含“CriOS”

我该怎么做呢?

仅供参考,我一直在使用 rubular 来测试 reg exp,这非常棒http://rubular.com/

4

2 回答 2

7

这应该这样做:

iPhone(?!.*?CriOS)

iPhone匹配该单词的任何出现。然后它使用iPhone匹配的负前瞻。.*?CriOS匹配任何/所有字符,直到找到CriOS. 这(?!expr)是一个负前瞻。如果表达式为假,则它之前的 ( Iphone) 将匹配,否则将不匹配。

于 2012-07-17T18:16:32.930 回答
1

有关 iPhone Safari 字符串的更完整详细信息,请尝试:

'Mozilla/(\d+(?:\.?\d+)*) \(([\w\s\;]+?)\) AppleWebKit/(\d+(?:.?\d+)*) \([\w\s\,]*\) Version/(\d+(?:.?\d+)*) Safari/(\d+(?:.?\d+)*)'

您现在显然也可以适应 Chrome ......

于 2013-09-29T20:27:24.127 回答