Ruby正则表达式:区分iOS Safari和iOS Chrome

问题描述 投票:1回答:2

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

这是Chrome for iOS 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/

ruby-on-rails ruby regex user-agent
2个回答
7
投票

这应该这样做:

iPhone(?!.*?CriOS)

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


1
投票

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

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

你现在可以明显地适应Chrome以及...

© www.soinside.com 2019 - 2024. All rights reserved.