使用JavaScript RegExp检测特定浏览器
我有一个类似这样的代码:使用JavaScript RegExp检测特定浏览器,javascript,regex,Javascript,Regex,我有一个类似这样的代码: var versionPattern = new RegExp("^Firefox/[1]{1}[7-9]{1}|[2-9]{1}[0-9]{1}$"); if (navigator.userAgent.indexOf(versionPattern) > 0) { alert("Firefox Detected"); return true; 我想检测Firefox 17及以上版本,但该代码似乎无法正常工作。如何改进RegExp
var versionPattern = new RegExp("^Firefox/[1]{1}[7-9]{1}|[2-9]{1}[0-9]{1}$");
if (navigator.userAgent.indexOf(versionPattern) > 0) {
alert("Firefox Detected");
return true;
我想检测Firefox 17及以上版本,但该代码似乎无法正常工作。如何改进RegExp?类似于:
navigator.userAgent.match(/Firefox\/([1]{1}[7-9]{1}|[2-9]{1}[0-9]{1})/);
不要在RegExp中使用^
,因为Firefox不是字符串的开头。
如果您想使用可选的17-19 | 20-99,它应该介于(
和)
之间
是在另一个字符串中查找字符串的第一个索引。您需要的变量是
var majorVersion
下面的代码示例使用navigator.userAgent实现浏览器
侦查它还使用navigator.appName和navigator.appVersion作为
仅当userAgent字符串具有“意外”时,才是最后一种方法
格式。在浏览器中,此代码生成以下输出:
浏览器名称=Mozilla Firefox完整版本=28.0
主要版本=28
navigator.appName=Netscape
navigator.userAgent=Mozilla/5.0(Windows NT 6.2;WOW64;rv:28.0)Gecko/20100101 Firefox/28.0 以下是执行浏览器检测的源代码:
var nVer=navigator.appVersion;
var nAgt=navigator.userAgent;
var browserName=navigator.appName;
var fullVersion=''+parseFloat(navigator.appVersion);
var majorVersion=parseInt(navigator.appVersion,10);//这就是你需要的
变量名称偏移量,verOffset,ix;
//在Firefox中,真正的版本在“Firefox”之后
如果((verOffset=nAgt.indexOf(“Firefox”)!=-1){
browserName=“Firefox”;
fullVersion=nAgt.子字符串(verOffset+8);
}
//在大多数其他浏览器中,“name/version”位于userAgent的末尾
如果((nameOffset=nAgt.lastIndexOf(“”)+1)<
(verOffset=nAgt.lastIndexOf('/'))
{
browserName=nAgt.substring(nameOffset,verOffset);
fullVersion=nAgt.子字符串(verOffset+1);
if(browserName.toLowerCase()==browserName.toUpperCase()){
browserName=navigator.appName;
}
}
//在分号/空格处修剪fullVersion字符串(如果存在)
如果((ix=fullVersion.indexOf(“;”)!=-1)
fullVersion=fullVersion.substring(0,ix);
如果((ix=fullVersion.indexOf(“”)!=-1)
fullVersion=fullVersion.substring(0,ix);
majorVersion=parseInt(“”+fullVersion,10);
如果(isNaN(主要版本)){
fullVersion=''+parseFloat(navigator.appVersion);
majorVersion=parseInt(navigator.appVersion,10);
}
文件。写(“”)
+“浏览器名称=”+browserName+”
'
+“完整版本=”+fullVersion+”
'
+“主要版本=”+majorVersion+”
'
+'navigator.appName='+navigator.appName+'
'
+'navigator.userAgent='+navigator.userAgent+'
'
)
您可以读取userAgent字符串并匹配版本号-
var bs=navigator.userAgent.match(/Firefox\/(\d+)/);
if(bs && parseInt(bs[1])>17) alert('Firefox '+bs[1]+' detected.')
您可以使用
*REGEX*.test('testString')测试正则表达式代码>
它返回true/false。我能找到像“Firefox17”“Firefox22”这样的字符串。。。通过此正则表达式:/^(Firefox)[1]{1}[7-9]{1}|[2]{1}[0-9]{1}$,因此您可以尝试:
/^(Firefox)[1]{1}[7-9]{1}{124;[2]{1}[0-9]{1}$.test(navigator.userAgent)
你为什么需要检测浏览器?@NiettheDarkAbsol:这有什么关系?我认为你需要测试或匹配,而不是indexOf
,除非你完全确定你在做什么,与浏览器嗅探相比,我更喜欢功能嗅探。我得到了一些业务需求,我必须编写代码。挑战并不重要。我正在寻求一些RegExp帮助来查找数字17及更高版本。var bs
nice touch!:)
var bs=navigator.userAgent.match(/Firefox\/(\d+)/);
if(bs && parseInt(bs[1])>17) alert('Firefox '+bs[1]+' detected.')