【问题标题】:Regex Negative Lookahead for Chrome & Safari适用于 Chrome 和 Safari 的正则表达式负前瞻
【发布时间】:2012-06-21 23:29:03
【问题描述】:

我需要匹配 Safari 浏览器,而不是使用一个正则表达式的 Chrome 浏览器。我通常对正则表达式没有任何问题,但负面的前瞻性让我很困惑。

/(?!chrome)(safari)/i.test("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5");

无法弄清楚为什么返回true

【问题讨论】:

  • 您匹配的子字符串 safari 不等于 chrome。 (如果我理解正确的话,意义不大。)
  • 嗯,我可能误解了用法。我试图让字符串匹配 safari,但前提是字符串与 chrome 不匹配。
  • Negative lookahead: q(?!u) 匹配一个 notq,后跟一个 u。这在这里无济于事。您实际上需要对这项工作进行否定的后视(字符串包含 Safari,前面没有 Chrome),但 JS 不支持否定的后视。

标签: javascript regex regex-lookarounds


【解决方案1】:

这样就可以了

^(?!.*chrome).*(safari)

顺便说一句,JavaScript 不支持lookbehind,但我认为lookahead 没有问题。

你在说什么

(?!chrome)(safari)

那是在“safari”之前(零宽度,所以从 s 之前的光标开始)不能有没有意义的字符串“chrome”。

【讨论】:

  • 这行得通,谢谢!说得通。另一个例子是我通过我的理解看到的。
  • 现在 Firefox 和 Chrome 支持 Look-behind,但 Safari 还不支持:caniuse.com/?search=lookbehind%20regex
猜你喜欢
  • 2021-10-11
  • 1970-01-01
  • 2011-10-14
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多