【问题标题】:Alter Regular Expression to Return 2 Values Instead of 3 from userAgent String更改正则表达式以从 userAgent 字符串返回 2 个值而不是 3 个值
【发布时间】:2010-04-30 00:12:50
【问题描述】:

我从 jQuery 中获取了一个正则表达式来检测浏览器的引擎是否是 WebKit 并获取它的版本号,它返回从 userAgent 字符串中提取的 3 个值:webkit/….…、webkit 和….… [ “….…”是版本号]。

我希望正则表达式只返回 2 个值:webkit 和……。

我对正则表达式很垃圾,所以请你用你的答案解释一下这个表达式。

我目前正在使用并希望改进的正则表达式是:/(webkit)[\/]([\w.]+)/

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13 开始,这个正则表达式将返回:webkit/525.13,webkit,525.13。我希望它只返回webkit,525.13

感谢您的所有帮助,在此先感谢!

【问题讨论】:

  • 如果您提供了一个示例 UserAgent,以及您希望从该字符串中提取的值。
  • 你能显示你正在使用的javascript吗?您的正则表达式看起来不错,只是您不需要方括号。 /(webkit)\/([\w.]+)/

标签: javascript regex user-agent


【解决方案1】:

在正则表达式中,您返回的值是括号中的值:

/([a-z]+)-#(\d+)/.exec("abc-#123")

// ["abc-#123", "abc", "123"]

您可以通过在开头添加?: 来使组不匹配:

/(?:[a-z]+)-#(\d+)/.exec("abc-#123")

// ["abc-#123", "123"]

重新阅读您的问题后进行编辑。

正则表达式的返回将包含(如我上面的示例所示)整个匹配的字符串,然后是匹配的组。如果您只想要匹配的组,只需切掉第一个值:

myRegex.exec(userAgent).slice(1);

// ["webkit", "525.13"]   <-- note that this is an array

【讨论】:

  • 谢谢!我想虽然不打扰slice 并且从不引用第一个值会更有效,因为无论如何都会创建第一个值然后切片。我能否像我的问题一样创建一个不返回整个匹配字符串和组的表达式。我知道这可能是不可能的。再次感谢您的所有帮助!
【解决方案2】:

Hem,如果您使用的是 jQuery,那么这个提议有一个内置方法,可以为您提供并且已经咀嚼过的结果。 http://api.jquery.com/jQuery.browser/

【讨论】:

  • 不,我没有使用 jQuery,抱歉,我本来可以更清楚一点,我使用的是 jQuery 从源代码中使用的正则表达式。我不想加载所有的 jQuery 来检测 WebKit,但是 jQuery.browser 使用的正则表达式应该和任何一样可靠。
猜你喜欢
  • 2016-01-06
  • 1970-01-01
  • 2012-01-04
  • 2015-12-04
  • 2021-07-12
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多