2010-04-09 5 views
0

Supposons que j'ai ceci:Javascript RegEx Question

$('ul.child').slideUp('slow'); 

Quelle serait la regex pour trouver 'ul.child' et 'slow' (y compris les guillemets) dans l'expression ci-dessus.

+0

Essayez-vous d'analyser le code JavaScript avec des expressions régulières? – Gumbo

+0

@Gumbo: oui mais ici je pense qu'il ne s'agit pas de n'importe quelle langue, il s'agit de trouver ce qu'il y a entre les guillemets simples. – Sarfraz

+0

Guys votre suggéré regex sélectionne '' ul.child '). SlideUp (' slow'' que tout, ne doit pas sélectionner ') .slideUp (' partie .Il ne doit sélectionner que ce qui est entre les guillemets simples – Sarfraz

Répondre

3

Cela devrait le faire:

var a = "$('ul.child').slideUp('slow');"; 
var matches = a.match(/'[\w.]*'/g)); 
// matches[0] = 'ul.child' 
// matches[1] = 'slow' 

g est un modificateur et correspond à chaque occurrence de l'expression.

Si vous voulez faire correspondre plus d'expressions, comme ul li, ul + li ou ul, li, vous devez mettre ces caractères supplémentaires dans la classe de caractères.


La mise à jour 1 n'a pas aidé.


Update2:

Vous avez eu une petite erreur dans l'un de vos expressions régulières. Changer ceci:

// single quote string 
the_code = the_code.replace(/('.+')/g,'<span class="code_string">$1</span>'); 

à

// single quote string 
the_code = the_code.replace(/('.+?')/g,'<span class="code_string">$1</span>') 

Vous devez faire non gourmand (avec le ?) afin de pas match de la dernière occurrence d'un ', mais à l'autre un.

Voir ici: http://jsbin.com/azovo3/4

Si vous voulez faire correspondre guillemet simple et double, chage à ceci:

the_code = the_code.replace(/(('|").+?("|'))/g,'<span class="code_string">$1</span>'); 
+0

Je veux utiliser regex quelque chose comme ceci: 'the_code = the_code.replace (/^[^ '] *? (' [\ W.] * ') * $ /,' $ 1 '). » Comment puis-je modifier mon code selon votre regex? – Sarfraz

+0

Fondamentalement, je veux remplacer ne correspond pas. – Sarfraz

+0

@Sarfraz: Ce serait très utile si vous montrez un exemple de quelle chaîne vous commencez et que voulez-vous en résultat? –

0

Essayez

/('[^']*?')/ 

par exemple

var test = "$('ul.child').slideUp('slow');"; 
matches = test.match(/('[^']*?')/g); 

C'est le plus proche que je pouvais obtenir rapidement. J'espère que cela t'aides. Quand je reviens, je vais aborder ce

+0

désolé, cela ne fonctionne pas – Sarfraz

+0

Il sélectionne «ul.child»). slideUp ('slow '' que tout, ne doit pas sélectionner ') .slideUp (' partie – Sarfraz

+0

Que se passe-t-il si vous mettez le support comme je l'ai fait? –

0

Je ne sais pas pourquoi vous en aurez besoin, mais cela fera l'affaire.

var str = "$('ul.child').slideUp('slow');"; 
var matches = str.match(/\$\((.+)\)\.slideUp\((.+)\);/); 
console.log(matches[1]); // 'ul.child' (with quotes) 
console.log(matches[2]); // 'slow' (with quotes) 

Et oui, matches indices sont corrects, matches[0] contient la partie entière correspondance, tandis que les indices> = 1 contiennent des groupes appariés

+0

c'est très spécifique impliquant le mot-clé slideup – Sarfraz

+0

Oui c'est, mais la question n'a pas dit cela devrait être plus générique. – RaYell

+0

s'il vous plaît voir ceci: http://jsbin.com/azovo3/edit. Si vous prévisualisez cela, vous verrez le problème à la ligne $ ('ul.child'). SlideUp ('lent') ;, il rend l'expression entière rouge. – Sarfraz

0
/^[^']*?('[\w\.]*')*$/ 

Je l'ai fait sur la page de testeur regex suivant et il a trouvé à la fois de vos cordes:

RegexPal

Vous pouvez utiliser des groupes de capture pour obtenir facilement les correspondances. L'expression va:

  1. Tout pas une citation unique, un match paresseux tous [^']*?
  2. quoi que ce soit Capturer commençant par une citation, contenant un certain nombre de caractères de texte ou périodes, suivie d'une seule citation correspondance gourmande tous ('[\w\.]*')*

Est-ce proche de ce que vous voulez?

+0

Le point '.' ne doit pas être échappé dans les classes de caractères. –

+0

s'il vous plaît voir ceci: http://jsbin.com/azovo3/edit. Si vous prévisualisez cela, vous verrez le problème à la ligne $ ('ul.child'). SlideUp ('lent') ;, il rend l'expression entière rouge. – Sarfraz

+0

ouais, tu dois sortir le groupe de capture. consultez la réponse à cette question. il exécute regex.exec et un tableau de correspondances est renvoyé. vous tirez les allumettes par position et testez la taille, etc. pour les atteindre. http://stackoverflow.com/questions/432493/how-do-you-access-the-matched-groups-in-a-javascript-regex – Rich