2010-05-18 6 views
3

J'ai une question pour un ninja regex Javascript: Comment pourrais-je simplifier ma création variable d'une chaîne en utilisant le regroupement regex? Je l'ai actuellement travailler sans utiliser de groupe, mais j'aimerais voir une meilleure façon!Javascript Regex groupe plusieurs correspondances dans le modèle

La chaîne est:

var url = 'resources/css/main.css?detect=#information{width:300px;}'; 

Le code qui fonctionne est:

var styleStr = /[^=]+$/.exec(url).toString(); 
var id = /[^\#][^\{]+/.exec(styleStr).toString(); 
var property = /[^\{]+/.exec(/[^\#\w][^\:]+/.exec(styleStr)).toString(); 
var value = /[^\:]+/.exec(/[^\#\w\{][^\:]+[^\;\}]/.exec(styleStr)).toString(); 

Cela donne:

alert(id)  //information 
alert(property) //width 
alert(value) //300px 

Des preneurs?

+0

En fait, la grammaire des sélecteurs CSS est un peu plus complexe. (Voir http://www.w3.org/TR/CSS2/grammar.html) – Gumbo

Répondre

4

Bien sûr ..

var url = 'resources/css/main.css?detect=#information{width:300px;}'; 
var matches = url.match(/#([^{]+){([^:]+):([^;]+)/); 
var id = matches[1]; 
var property = matches[2]; 
var value = matches[3]; 
+0

Boy vous les gars sont rapides! C'est tout à fait, merci! – mummybot

0
#(?<type>.+){(?<property>.*?):(?<value>.*?); 

Group "type": information  31  11 
Group "property": width  43  5 
Group "value": 300px 

[Jay aime RegexBuddy]

JS:

result = subject.match(/#([\s\S]+)\{([\s\S]*?):([\s\S]*?);/ig); 
Questions connexes