如果检测到一个关闭多个浏览器,我想启动一个脚本。我做了一个常规数组,我想检查它们是否存在于navigator.userAgent字符串中。我想用下划线去做而不是每一个。Ellegant在数组中找到regEx
var browsers = [/chrome/, /opera/];
/* something like: */
if (!_.contains(browsers, navigator.userAgent.toLowerCase()) return;
如果检测到一个关闭多个浏览器,我想启动一个脚本。我做了一个常规数组,我想检查它们是否存在于navigator.userAgent字符串中。我想用下划线去做而不是每一个。Ellegant在数组中找到regEx
var browsers = [/chrome/, /opera/];
/* something like: */
if (!_.contains(browsers, navigator.userAgent.toLowerCase()) return;
使用_.some()
:
if (!_.some(browsers, function(item){
return navigator.userAgent.toLowerCase().test(item);
}) return;
不过,我会建议使用@dystroy's single-regex solution。它速度更快,代码更短。
你可以是这样做的:
var arr = ["chrome", "opera"]; // Strings, not regexes.
var regexp = new RegExp(arr.join('|'), 'i');
if (!regexp.test(navigator.userAgent)) return;
或者,作为一个班轮:
if (!RegExp(["chrome", "opera"].join('|'), 'i').test(navigator.userAgent)) return;
更好的解决方案是只有一个正则表达式,这样就不必迭代。并使用i
标志可以让你避免toLowerCase
:
if (!/chrome|opera/i.test(navigator.userAgent)) return;
好的解决方案。但我需要使用数组,这来自数据库。那么如何在你的代码中实现一个数组? if(!/ + arr.join('|')+ /i.test(navigator.userAgent))return; – 2014-10-06 08:22:01
如果你有一个数组,请使用_some,就像Cerbrus所说的那样,不要试图构建一个复合正则表达式。但至少可以说,在数据库中这样做是非常令人怀疑的。您的应用程序的设计看起来不正确。 – 2014-10-06 08:25:07
您_do_明白,强调只是通过所有元素循环的东西,如一个'for',对?我当然是 – Cerbrus 2014-10-06 08:04:14
。我只是想让我的代码更漂亮 – 2014-10-06 08:06:05
好吧。在那种情况下,如果你想用下划线来做,你会在寻找['_.some()'](http://underscorejs.org/#some)。然而,dystroy的答案要好得多(更快,更干净,更短...)。 – Cerbrus 2014-10-06 08:07:37