2010-03-08 4 views
1

Je lis un fichier js à here, sur le haut de ce fichier js vous pouvez trouver les lignes suivantes:Quelqu'un peut-il expliquer cette grammaire JavaScript (syntaxe) s'il vous plaît?

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

Maintenant, ma question est ce que cela signifie par RegExp [ « $ 1 » ], je ne trouve pas cette syntaxe dans la documentation js, mais c'est un peu comme Ruby Syntaxe regex. Quelqu'un peut-il l'expliquer s'il vous plaît? Grand merci.

PS: Merci Saint Marc, maintenant, je sais que je peux l'utiliser comme ceci:

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

Mais où trouver la documentation de cette syntaxe? Même le célèbre livre JavaScript le guide définitif n'a pas mentionné que RegExp peut être utilisé comme ça.

Répondre

2

regexp.Méthode d'essai() renseigne l'objet global RegExp avec ce qu'il a trouvé, voir the full list

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

cette façon est dépréciée, beaucoup mieux est d'utiliser exec() (et son match de contrepartie string())

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

Son un script de détection de l'agent utilisateur du navigateur et

RegExp["$1"] est groupe d'expression régulière 1, ce qui serait

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

Par exemple

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

MISE À JOUR:

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

Au-dessus de codes moyenne, s'il y a des nombres dans la chaîne, extraire ceux-ci et l'analyse syntaxique en entier

+0

Nous vous remercions de votre aide! –

2

Le site de MDC était en panne, donc le meilleur que je peux offrir est MSDN's documentation pour le RegExp obj ect. En résumé, $1, $2, $3, ...$9 sont les propriétés de l'objet RegExp, contenant les correspondances par ordre d'apparition dans la dernière expression régulière exécutée.

Exemple (extrait de 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); 
} 

L'utilisation d'accolades carrés dans votre exemple est une autre façon de accéder aux propriétés d'un objet - RegExp.$1 est fonctionnellement identique à RegExp["$1"] (dans ce cas). Cela vous permet de récupérer des groupes correspondants sans utiliser la méthode match.

+0

Merci pour votre aide! –

Questions connexes