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

pej*_*ohn 1 ruby regex user-agent ruby-on-rails

根据以下文档: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
Run Code Online (Sandbox Code Playgroud)

这里是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
Run Code Online (Sandbox Code Playgroud)

尽管我可以说明未来的不同之处将是Chrome包含"CriOS".我希望能够区分这两个浏览器,并因此设置使用正则表达式.

使用:

/Gecko\) (?!CriOS)/
Run Code Online (Sandbox Code Playgroud)

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

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

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

我该怎么做呢?

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

Kas*_*sel 7

这应该这样做:

iPhone(?!.*?CriOS)
Run Code Online (Sandbox Code Playgroud)

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

http://rubular.com/r/ya6Ojjn6vp