2010-10-26 13 views
0

Ce que je veuxJavascript Regex: Tout ce dont l'intérieur/balises


De l'subject ci-dessus, je veux search=adam et page=content et message=2.

Objet:


/search=adam/page=content/message=2 

Ce que j'ai essayé jusqu'à présent


(\/)+search+\=+(.*)\/ 

Mais ce n'est pas bon parce que parfois le sujet se termine par rien et mon cas, il doit y avoir un /

(\/)+search+\=+(.*?)+(\/*?) 

Mais ce n'est pas bon parce que va trought la (\/*?) et me montre everyting ce qui est après /search=

Conseil de l'outil:


Regex Tester

Répondre

2

me montre ce qui est everyting après/search =

Vous avez utilisé une .* gourmande qui se fera un plaisir match de barres obliques ainsi. Vous pouvez utiliser un .*?, ou une classe de caractère non gourmand qui exclut la barre oblique:

(\/|^)search=([^\/]*)(\/|$) 

Ici l'avant et à la fin peut être soit une barre oblique ou le début/fin (^/$) de la chaîne. (Je l'ai enlevé les + s, comme je ne peux pas travailler du tout ce qu'ils sont censés faire.)

Vous pouvez également oublier la regex:

var params= {}; 
var pieces= subject.split('/'); 
for (var i= pieces.length; i-->0;) { 
    var ix= pieces[i].indexOf('='); 
    if (ix!==-1) 
     params[pieces[i].slice(0, ix)]= pieces[i].slice(ix+1); 
} 

Maintenant, vous pouvez juste dire params.search, params.page etc.

3

utilisation String.split(), pas de regex requis:

var A = '/search=adam/page=content/message=2'.split('/'); 

Notez que vous devrez peut-être ignorer le premier élément de tableau en utilisant .slice(1).

Ensuite, vous pouvez parcourir les paires nom-valeur en utilisant quelque chose comme:

for(var x = 0; x < A.length; x++) { 
    var nameValue = A[x].split('='); 
    if(nameValue[0] == 'search') { 
     // do something with nameValue[1] 
    } 
} 

Cela suppose qu'aucun signe égal sera la valeur. Espérons que c'est le cas, mais sinon, vous pouvez utiliser nameValue.slice(1).join('=') au lieu de nameValue[1];