2011-10-10 1 views
2

Je possède ce morceau de code:Rapide: Quel est le problème avec ce RegEx?

_regex = /((?<!placeholder)\w+(?:\s*=\s*(?:"[^"]*"|'[^']*')))/;  
imgTag = imgTag.replaceAll(_regex, ' '); 

ont également essayé à la place:

imgTag = imgTag.replace(new RegExp(/((?<!placeholder)\w+(?:\s*=\s*(?:"[^"]*"|'[^']*')))/, "gi"), ' '); 

Mais mon code ne se passe cette ligne:

_regex = /((?<!placeholder)\w+(?:\s*=\s*(?:"[^"]*"|'[^']*')))/;  

Ou cette ligne:

imgTag = imgTag.replace(new RegExp(/((?<!placeholder)\w+(?:\s*=\s*(?:"[^"]*"|'[^']*')))/, "gi"), ' '); 

Donc le problème est dans mon RegEx, non?

Je ne peux pas le voir, quelqu'un peut s'il vous plaît jeter une lumière?

Merci!

+0

duplication possible de [balises ouvertes de correspondance RegEx à l'exception des balises autonomes XHTML] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml- tags autonomes) – Amber

+0

Votre utilisation de 'RegExp' est complètement fausse, mais oui, votre expression régulière n'est pas correcte non plus:' SyntaxError'. JavaScript ne sait pas sur lookbehinds '?

+0

Peut être. C'est la première fois que j'ai plus de contacts avec RegExes. J'utilise le livre de recettes d'expressions régulières de O'Reilly pour ramasser quelques choses, mais certainement encore beaucoup à apprendre au sujet de ces types. Que diriez-vous est "complètement faux" à propos de cette RegEx? Et merci pour l'astuce lookbehind! –

Répondre

2

Javascript ne supporte pas lookbehinds. Vous ne pouvez pas écrire ceci:

(?<!placeholder) 

Utilisez une place préanalyse:

((?!placeholder).{11}|^.{0,10}) 

Vous devrez ajuster votre chaîne de remplacement aussi, parce que cela correspond à des caractères supplémentaires juste avant le début de ce que vous voulez remplacer.


Aussi cela ne fonctionnera pas: var regex = new Regexp(/.../, "gi");

écrire ceci: var regex = /.../gi;

+0

merci, c'était effectivement mon problème! Et à propos du nouveau code Regexp (/.../) ', c'est parce que je voulais les drapeaux' gi', ou il y a une autre façon de le faire avec la fonction 'replace'? Merci encore! –

+0

@BeOliveira: Si vous utilisez 'RegExp', vous devez utiliser une chaîne. Voir https://developer.mozilla.org/fr/JavaScript/Guide/Regular_Expressions –

+0

@FelixKling: Merci encore! J'apprécie vraiment RegEx, essayant toujours d'obtenir une compréhension générale, cependant. J'ai utilisé 'regexp =/((?! Espace réservé) \ w + (?: \ S * = \ s * (?:" [^ "] *" | '[^'] * ')))/gi; ' et ça a marché, mais maintenant je sais faire la même chose avec 'RegExp' Merci pour les pointeurs! –

2

JavaScript ne supporte pas les regarder en arrière des modèles. (C'est la partie (?< pattern).)