【问题标题】:Ruby regular expression: distinguishing between iOS Safari & iOS ChromeRuby 正则表达式:区分 iOS Safari 和 iOS Chrome
【发布时间】:2012-07-17 18:02:21
【问题描述】:

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

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

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/

【问题讨论】:

  • iOS 上有 chrome 吗?废话,我什至不知道我是否知道。
  • 几周前刚出来 :)

标签: ruby-on-rails ruby regex user-agent


【解决方案1】:

应该这样做:

iPhone(?!.*?CriOS)

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

【讨论】:

  • 谢谢,它有效!我是正则表达式的新手。你介意解释一下上面的语法吗?
  • 希望对您有所帮助。
  • 如果它有效,你应该把它标记为答案,这样它就可以被关闭了。
  • 谢谢。很好的解释。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-09-18
    • 2016-02-05
    • 2023-04-07
    • 2011-07-25
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多