我想用 Javascript 检测 Chrome 操作系统,并且我正在使用navigator.userAgent
为了这。现在,我正在运行 Chrome 操作系统,我的导航器 userAgent 是
Mozilla/5.0 (X11; CrOS armv7l 6680.78.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.102 Safari/537.36
现在。我使用正则表达式来检查 userAgent 的样式,并编写了下面的代码。
<script>
if ( navigator.userAgent = /^Mozilla\/\d{1}^.\d{1}^(X11; CrOS i\d{3} \d{1}^.\d{2}\d{3} ^AppleWebKit\/\d{3}^.\d{2} ^(KHTML, like Gecko) Chrome\/ \d{2}^.\d{1}^.\d{3}^.\d{2} ^Safari\/\d{3}^\d{2}/ ){
console.log(navigator.userAgent);
} else {
console.log(navigator.userAgent);
}
</script>
现在,加载此脚本后,我收到错误。
Uncaught SyntaxError: Invalid regular expression: /^Mozilla\/\d{1}^.\d{1}^(X11; CrOS i\d{3} \d{1}^.\d{2}\d{3} ^AppleWebKit\/\d{3}^.\d{2} ^(KHTML, like Gecko) Chrome\/ \d{2}^.\d{1}^.\d{3}^.\d{2} ^Safari\/\d{3}^\d{2}/: Unterminated group
我的代码有什么问题吗?
它抱怨的是你有一个(
没有匹配的)
。在正则表达式中,(
and )
define 捕获组并且必须保持平衡。如果你想匹配实际的(
or )
,你必须用反斜杠转义它。
但还有其他几个问题。拥有没有意义^
例如,(“输入开始”)除表达式开头之外的任何位置。
但我不认为还有什么CrOS
在用户代理中,所以也许很简单:
if (/\bCrOS\b/.test(navigator.userAgent)) {
// yes, it is (probably, if no one's mucked about with their user agent string)
} else {
// No, it isn't (probably, if no one's mucked about with their user agent string)
}
The \b
是“单词边界”,所以我们不匹配单词中间的字符串。请注意,我将其区分大小写。
旁注:我发现https://regex101.com/#javascript(我与它没有任何关系)对于调试正则表达式非常有用。
旁注#2:如果您真的需要检测 ChromeOS,但如果这只是您需要检查的一项功能,例如jfriend00 指出,特征检测可能是更好的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)