2009-01-08 8 views
0

Je le suivais RegEx aiGroupement expression régulières des backreferences

id=(.*?) | id="(.*?)" 

La raison est que je suis en train de remplacer Ids des navigateurs DOM à l'aide de JavaScript. IE, mais supprime les citations d'attributs d'élément car il semble ne pas les avoir dans le DOM

Le problème que j'ai est que les références arrière de chaque instruction alternative sont dans des groupes séparés ($ 1 et $ 2) car la correspondance est seulement un OU l'autre puis-je retourner à la fois la référence arrière comme une seule référence arrière?

EDIT:

<div id="test1" /><div id=test2 /> 

correspondra comme suit

match   | $1 | $2 
-------------------------------- 
    id="test1" | test1 | 
    id=test2  |  | test2 

Je veux juste deux références arrières à ajouter à 1

+0

Pouvez-vous poster un exemple montrant le problème? –

+0

Avez-vous édité la question – Sheff

Répondre

0
id="?([\w-]*)"? 
+0

Ne correspond pas si un ID contient un tiret ... – James

+0

Non, il doit également correspondre à deux-points, des points et le premier caractère d'un ID doit être une lettre. – James

+1

* soupir * pouvons-nous supposer que le PO va gérer lui-même étant donné que la question portait sur le groupement, pas sur les chaînes d'ID valides? – annakata

0

$ Qu'en est:

id="?(.*?)"? 

(éventuellement cela. devrait être [^ "] - je ne pas testé)

+0

Cela ne fonctionnera qu'enti = "et manque le reste – Sheff

+0

aurait dû être"? ([^ "] *)"? then, c'est la vie – annakata

+0

Non, le problème est que tout ce qui suit le signe égal est optionnel. –

0

j'utiliser

id\s*=\s*("[^"]*"|'[^']*'|[^\s>]*) 

Cela correspond

id="foo" 
id='bar' 
id=baz 

Mais pour récupérer juste la valeur d'attribut , vous devez dépouiller le " ou ' au début/fin s'il est entouré par des citations