2010-03-08 148 views
1

我读在here一个js文件,在这个最顶端的js文件,你可以找到以下行:由的RegExp [“$ 1”任何人都可以解释这个JavaScript语法(语法)吗?

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"]; 

现在我的问题是什么意思],我无法在js文档中找到此语法,但它有点像Ruby的正则表达式语法。任何人都可以解释一下吗?万分感谢。

PS: 感谢S.Mark,现在我知道我可以这样使用它:

var a="abc23de"; 
alert(/(\d+)/.test(a)&&parseInt(RegExp["$1"])); 

但我在哪里可以找到这种语法的文档?即使是着名的书籍JavaScript权威指南还没有提到RegExp可以像这样使用。

回答

2

regexp。test()方法填充与它已经找到了全局RegExp对象,见the full list

/(\d+)(.+)/.test("123abc"); 
alert(RegExp["$1"]) // "123" 

这种方式已经过时,更好的方法是使用EXEC()(和它的字符串对应匹配())

var matches = /(\d+)(.+)/.exec("123abc"); 
alert(matches[1]) // "123" 
3

它的一个浏览器的用户代理检测脚本和

RegExp["$1"]是正则表达式组1,这将是

(\d+.\d+)/MSIE (\d+.\d+);/

例如

  • 6.0MSIE 6.0
  • 20091126Firefox/20091126
  • 0.2.153.1Chrome/0.2.153.1

UPDATE

var a="abc23de"; 
alert(/(\d+)/.test(a)&&parseInt(RegExp["$1"])); 

上面的代码的意思是,如果有数字的字符串中,提取那些和解析成整型

+0

谢谢你的帮助! – 2010-03-08 09:18:38

2

MDC网站被关闭了,所以我可以提供的最好的是MSDN's documentationRegExp obj等。简而言之,$1, $2, $3, ...$9RegExp对象的属性,包含在上次执行的正则表达式中出现顺序的匹配项。

实施例(从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方法的情况下检索匹配的组。

+0

谢谢你的帮助! – 2010-03-08 09:19:04

相关问题