我正在here读取一个js文件,在这个js文件的最上面你可以找到以下几行:
var
gsAgent=navigator.userAgent.toLowerCase(),
gsAppVer=navigator.appVersion.toLowerCase(),
gsAppName=navigator.appName.toLowerCase(),
gbIsOpera=gsAgent.indexOf("opera")>-1,
gbIsKHTML=gsAgent.indexOf("khtml")>-1
||gsAgent.indexOf("konqueror")>-1||gsAgent.indexOf("applewebkit")>-1,
gbIsSafari=gsAgent.indexOf("applewebkit")>-1,
gbIsIE=(gsAgent.indexOf("compatible")>-1&&!gbIsOpera)
||gsAgent.indexOf("msie")>-1,
gbIsTT=gbIsIE?(gsAppVer.indexOf("tencenttraveler")!=-1?1:0):0,
gbIsFF=gsAgent.indexOf("gecko")>-1&&!gbIsKHTML,
gbIsNS=!gbIsIE&&!gbIsOpera&&!gbIsKHTML&&(gsAgent.indexOf("mozilla")==0)
&&(gsAppName=="netscape"),
gbIsAgentErr=!(gbIsOpera||gbIsKHTML||gbIsSafari||gbIsIE||gbIsTT
||gbIsFF||gbIsNS),
gbIsWin=gsAgent.indexOf("windows")>-1||gsAgent.indexOf("win32")>-1,
gbIsVista=gbIsWin&&(gsAgent.indexOf("nt 6.0")>-1||gsAgent.indexOf("windows vista")>-1),
gbIsWin7=gbIsWin&&gsAgent.indexOf("nt 6.1")>-1,
gbIsMac=gsAgent.indexOf("macintosh")>-1||gsAgent.indexOf("mac os x")>-1,
gbIsLinux=gsAgent.indexOf("linux")>-1,
gbIsAir=gsAgent.indexOf("adobeair")>-1,
gnIEVer=/MSIE (\d+.\d+);/i.test(gsAgent)&&parseFloat(RegExp["$1"]),
gsFFVer=/firefox\/((\d|\.)+)/i.test(gsAgent)&&RegExp["$1"],
gsSafariVer=/version\/((\d|\.)+)/i.test(gsAgent)&&RegExp["$1"],
gsChromeVer=/chrome\/((\d|\.)+)/i.test(gsAgent)&&RegExp["$1"];
现在我的问题是 RegExp [“$ 1”] 是什么意思,我在js文档中找不到这种语法,但它有点像< strong> Ruby 的正则表达式语法。有人能解释一下吗?非常感谢。
PS: 谢谢S.Mark,现在我知道我可以这样使用它:
var a="abc23de";
alert(/(\d+)/.test(a)&&parseInt(RegExp["$1"]));
但是我在哪里可以找到这种语法的文档?即使是着名的书 JavaScript权威指南 也没有提到可以像这样使用RegExp。
答案 0 :(得分:3)
它是一个浏览器用户代理检测脚本和
RegExp["$1"]
是正则表达式组1,它将是
(\d+.\d+)
中的 /MSIE (\d+.\d+);/
例如
6.0
中MSIE 6.0
在20091126
Firefox/20091126
在0.2.153.1
Chrome/0.2.153.1
<强>更新强>:
var a="abc23de";
alert(/(\d+)/.test(a)&&parseInt(RegExp["$1"]));
上面的代码表示,如果字符串中有数字,则提取它们并将其解析为Integer
答案 1 :(得分:2)
MDC网站已关闭,因此我可以为RegExp
对象提供MSDN's documentation。简而言之,$1, $2, $3, ...$9
是RegExp
对象的属性,包含最后执行的正则表达式中出现顺序的匹配。
示例(摘自MSDN):
function matchDemo(){
var s;
var re = new RegExp("d(b+)(d)","ig");
var str = "cdbBdbsbdbdz";
var arr = re.exec(str);
s = "$1 contains: " + RegExp.$1 + "\n";
s += "$2 contains: " + RegExp.$2 + "\n";
s += "$3 contains: " + RegExp.$3;
return(s);
}
在示例中使用方括号只是访问对象属性的另一种方式 - RegExp.$1
在功能上与RegExp["$1"]
相同(在本例中)。这允许您在不使用match
方法的情况下检索匹配的组。
答案 2 :(得分:2)
regexp.test()方法使用它找到的内容填充全局RegExp对象,请参阅the full list
/(\d+)(.+)/.test("123abc");
alert(RegExp["$1"]) // "123"
这种方式已被弃用,更好的是使用exec()(及其字符串对应的match())
var matches = /(\d+)(.+)/.exec("123abc");
alert(matches[1]) // "123"