繁体   English   中英

谁能解释这个JavaScript语法(语法)?

[英]Can anyone explain this JavaScript grammar(syntax) please?

我在这里阅读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文档中找不到此语法,但是有点像Ruby的regex语法。 谁能解释一下? 万分谢意。

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

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

但是在哪里可以找到该语法的文档? 即使是著名的JavaScript权威指南也没有提到RegExp可以这样使用。

其浏览器用户代理检测脚本和

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

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

例如

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

更新

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

上面的代码表示,如果字符串中有数字,请提取这些数字并将其解析为Integer

MDC站点已关闭,因此我能提供的最好的服务是RegExp对象的MSDN文档 简而言之, $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方法即可检索匹配组。

regexp.test()方法使用找到的内容填充全局RegExp对象,请参阅完整列表

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

不建议使用这种方法,更好的方法是使用exec()(及其字符串对应的match())

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM