2010-02-16 4 views
0

Les expressions régulières javascript prennent-elles en charge les références arrière dans la classe de caractères?javascript regexp backreferences dans la classe de caractères possible?

Je veux faire quelque chose comme ceci:

htmlString.replace(/attribute_name=(['"])[^\1]*\1/,'') 

Mais cela ne fonctionne pas. Cela fait:

htmlString.replace(/attribute_name=(['"])[^'"]*\1/,'') 

Unfortunatelly mon nom_attribut peut contenir ou apostrophes citations, donc je dois le caractère à exclure Effectuer une réelle cité de l'intérieur de l'attribut, mais laissez l'autre. Je ne peux pas être sûr lequel est utilisé. Je peux supposer que les guillemets sont sous forme d'entité, mais il peut y avoir des apostrophes à l'intérieur:

<div attribute_name="John's car" class="someClass"></div> 
<div attribute_name='some &quot;quoted text&quot;' class="someClass"></div> 

Je ne suis pas en mesure de prédire quel "ou" sera utilisé dans l'attribut

Comment. se débarrasser de l'attribut et laisser l'attribut de classe seul (pas trop coupé)?

contexte: Je reçois le code HTML par $ ('templateContainer'). innerHTML.Je dois modifier ce code HTML avant de l'insérer Je dois couper des attibuts non-standard et tous les attributs d'ID

+2

Pourquoi ne pas utiliser les DOM? – Gumbo

Répondre

1

Vous seriez beaucoup mieux d'utiliser DOM ou un autre modèle réel conçu pour le contenu hiérarchique. Cela dit, si vous devez utiliser regex, le plus simple serait probablement d'utiliser simplement un | (OR) à la place.

htmlString.replace(/attribute_name=('[^']*'|"[^"]*")/,'') 
+0

Oui, les solutions les plus simples sont les plus difficiles à trouver. Je sais qu'il serait préférable d'utiliser DOM, mais je dois le faire avant de le remettre dans DOM. C'est le résultat d'une erreur précédente dans le projet et j'ai peu de temps pour le redessiner. Merci. – SWilk

3

Je suis d'accord avec les autres réponses à ce que je ne pense pas que les attributs sont l'endroit pour faire ce genre de chose, mais je suis aussi méfiant de recommander soit le DOM. Je me sens juste sale quand je fais ça, je ne sais pas pourquoi.

Je vais habituellement essayer d'utiliser un objet javascript pour stocker mes données, puis les référencer en utilisant des clés bien formées, etc. shrug C'est plus de travail, mais c'est plus propre IMHO. Mais, ce n'est certainement pas le seul moyen d'accomplir la tâche.

Quant à votre question, vous pouvez aussi utiliser la mise en correspondance non gourmand en JavaScript et il ressemblerait à ceci:

htmlString.replace(/ ?attribute_name=(['"]).*?\1/, '') 

Regular Expressions in JavaScript | evolt.org