Essentiellement, je tente d'extraire le dernier nom de balise d'une poignée de sélecteurs de css différents.Extraction de la dernière baliseNom de divers sélecteurs
J'ai implémenté avec succès ce dont je parle en javascript, je cherche un moyen plus compact en utilisant seulement 1 expression regex de préférence.
Voici ce que j'ai réussi à faire.
//Trim selector, remove [attr] selectors due to conflicts, and standardize >,~,
selector=selector.replace(/^(\s|\u00A0)+|(\s|\u00A0)+$/g,'')
selector=selector.replace(/\[[^\]]*\]/g,'[]').replace(/\s*([>~\s])\s*/g,'$1');
var theSplit = selector.split(/[>~\s]/);
selector = /^[^.\[:]*/.exec(theSplit[theSplit.length-1]) || "*";
Je ne cherche à soutenir css 2.0 sélecteurs qui sont 100% pris en charge par Internet Explorer 7.
Par exemple + sélecteur et: sélecteurs premier enfant sont statiques dans IE7 et donc je n'ai pas besoin pour les soutenir. Voici une liste de sélecteurs CSS qui doivent fonctionner.
#test span ul a
#test >span[style="background:green"]
#id + span ~ article.class
section header.class
body
div
body div
div p
div > p
div ~ p
div[class^=exa][class$=mple]
div p a
.note
div.example
ul .tocline2
#title
h1#title
div #title
ul.toc li.tocline2
ul.toc > li.tocline2
a[href][lang][class]
div[class]
div[class=example]
div[class^=exa]
div[class$=mple]
div[class*=e]
div[class|=dialog]
div[class!=made_up]
div[class~=example]
Édition: J'ai fini par utiliser ce script. Il prend même en considération le sélecteur universel
var lastTagName = selector.replace(/\[[^\]]+\]|[\.#][\w-]+|\s*$/g,'').replace(/^.*[^\w]/, '')||'*'
En fin de compte, je fini par utiliser votre script (avec un couple modifications). Connaissez-vous un moyen de simplifier à une expression? – William
La puissance de cette approche est, en fait, qu'elle prend deux étapes. Les deux premiers (recherche des crochets et des modificateurs '.' /' # 'peuvent être combinés en une expression avec' | ', mais la combinaison des deux étapes nécessiterait de décrire exactement comment les différents bits des sélecteurs se répètent. Bonus ajouté: pour la plupart, c'est en fait lisible. – VoteyDisciple