如果用户代理字符串包含Chrome,如何不返回正则表达式匹配?

时间:2017-09-28 14:11:37

标签: regex user-agent

我想创建一个正则表达式模式,它将为safari用户代理字符串提供匹配。问题是Chrome似乎也匹配:

Safari Regex:

(?!Chrome).*Safari

这仍然与Chrome用户代理字符串匹配,但我认为负面展望可以解决此问题吗?

Chrome用户代理:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36

Safari用户代理:

Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27

有人可以为我提供正则表达式解决方案吗?

更新

我在Efficient User-Agent Regex to find Safari in Python处找到的答案并未提供此问题的正则表达式解决方案。事实上,它根本没有解决这个问题,所以我很惊讶它被接受为答案

由于

5 个答案:

答案 0 :(得分:2)

您可以使用

^(?!.*Chrome).*Safari

请参阅regex demo

<强>详情

  • ^ - 字符串的开头
  • (?!.*Chrome) - 如果除了换行符之外的0 +字符之后有Chrome子字符串,则匹配失败
  • .* - 除了换行符之外的任何0 +字符
  • Safari - Safari substring。

更新(修复答案中的问题)

Safari的正则表达式:

^(?!.*(?:Chrome|Edge)).*Safari

Chrome正则表达式:

^(?!.*Edge).*Chrome

Regex for Edge:

/Edge/

答案 1 :(得分:1)

这有效:

^(?!.*\bChrome).*$

Demo

或者,

 ^(?!.*\bChrome).*\bSafari

如果您正在寻找没有专门针对Chrome的Safari比赛

你的正则表达式(?!Chrome).*Safari的问题是你需要.*来匹配字符串开头的负面外观断言中Chrome前面的内容。

答案 2 :(得分:0)

建立在@WiktorStribiżew&amp; @dawg非常好的答案,我觉得对于那些寻找在其用户代理字符串中包含“safari”的3个浏览器的完整解决方案的人来说,这可能是有用的:

Safari的正则表达式:

^(?!.*Chrome|Edge).*Safari

适用于Chrome的正则表达式:

^.*Chrome(?!.*Edge)

Regex for Edge:

Edge

答案 3 :(得分:0)

你试过这个基本的吗?它仅与Safari匹配。

.*(Safari).*

请参阅regex101上的测试。

答案 4 :(得分:0)

以上答案适用于桌面和Android。 对于iOS:

^(?!.*CriOS).*Safari