text = '#container a.filter(.top).filter(.bottom).filter(.middle)';
regex = /(.*?)\.filter\((.*?)\)/;
matches = text.match(regex);
log(matches);
// matches[1] is '#container a'
//matchss[2] is '.top'
Je me attends à capturerexpression régulière pour analyser la chaîne comme jQuery sélecteur
matches[1] is '#container a'
matches[2] is '.top'
matches[3] is '.bottom'
matches[4] is '.middle'
Une solution serait de diviser la chaîne en #container un et de repos. Ensuite, prenez le repos et exécutez exec récursive pour obtenir l'élément à l'intérieur().
Mise à jour: Je poste une solution qui fonctionne. Cependant je cherche une meilleure solution. N'aimez pas vraiment l'idée de diviser la chaîne et ensuite le traitement Voici une solution qui fonctionne.
matches = [];
var text = '#container a.filter(.top).filter(.bottom).filter(.middle)';
var regex = /(.*?)\.filter\((.*?)\)/;
var match = regex.exec(text);
firstPart = text.substring(match.index,match[1].length);
rest = text.substring(matchLength, text.length);
matches.push(firstPart);
regex = /\.filter\((.*?)\)/g;
while ((match = regex.exec(rest)) != null) {
matches.push(match[1]);
}
log(matches);
Vous cherchez une meilleure solution.
très bien fait. Je vais devoir lire un livre regex pour comprendre le look-ahead –
Je ne reçois pas ce code. Quelqu'un peut-il expliquer? –
@Raj, @dorelal, voir mon édition. Et merci Raj. –