ruby-on-rails - ruby 正则表达式 : distinguishing between iOS Safari & iOS Chrome

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

根据以下文档: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

据我所知, future 的不同之处在于 Chrome 包含“CriOS”。我希望能够区分这两种浏览器,因此着手使用正则表达式来区分。

使用:

/Gecko\) (?!CriOS)/

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

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

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

我该怎么做?

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

最佳答案

应该这样做:

iPhone(?!.*?CriOS)

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

关于ruby-on-rails - ruby 正则表达式 : distinguishing between iOS Safari & iOS Chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11528253/

相关文章:

java - 用于检测开头或结尾的点的正则表达式

css - 捕获网页的快照

ruby-on-rails - 计数/总和等的最佳数据库实践

ruby-on-rails - 盆景服务器挂了怎么办?

使用命令行选项的 ruby​​ 习语

ruby - deep_clone gem 不复制 created_at

ruby-on-rails - 如何为 Controller 和 View 对象设置 routes.rb?

ruby-on-rails - 如何返回 Ruby 字符串中最后一个斜杠 (/) 之后的所有内容

python - 正则表达式根据缩写名的大写字母和句点组合进行拆分

c++ - 检测圆括号,打开和关闭