Je voudrais remplacer toutes les chaînes qui sont entourées par À titre d'exemple, cette chaîne ... p> ... devrait devenir ... p> Nous voyons My JavaScript -regex pour l'instant (qui ne se soucie pas de savoir s'il est enfermé par modifier: Notez qu'il pourrait être le cas qu'il y a un nombre impair de - code> dans des chaînes jointes par ~ code>, mais pas si cette chaîne est à nouveau enfermée par * Code>. - code> est seulement remplacé s'il est pas em> dans * * code> ou non): p> * code> s. p> p>
4 Réponses :
C'est un type de chose délicat à faire avec des expressions régulières. Je pense que ce que je ferais, c'est quelque chose comme ceci: qui recherche em> - code> ou * code> groupes et effectue uniquement le remplacement sur des ennets. En général, les syntaxes "nidification" sont difficiles (ou impossibles) avec des expressions régulières. (Et bien sûr, comme un commentaire sur les notes de questions, il y a des cas particuliers - des métacaractères suspendus - qui compliquent cela aussi.) P> p>
Exemple de travail: jsfiddle.net/zb6bu - Je ne sais pas pourquoi cela ne se lève pas, cela fonctionne juste comme prévu! +1
@Bergi je vois que maintenant, + 1 pour tous :) haha
@Pointy: Le groupe est vraiment inutile, il correspond à ce que contient le premier argument ... et vous ne devez pas utiliser la notation de support sur les chaînes.
@Bergi oui c'est probablement vrai; C'est juste une habitude. Je ne sais pas ce que tu veux dire sur la notation du support. Oh, tu veux dire au lieu de .chardat () code>? Y a-t-il des navigateurs modernes qui ne font pas ça?
@Bergi C'est dans la spécification :-)
Pourriez-vous s'il vous plaît expliquer comment cela ressemblerait si vous remplacez tout : d code>, mais pas si ils sont entre - code> S?
@poitroae - Hmm, c'est un problème quelque peu différent; Je devrais y penser. Vous voudrez peut-être poser une question distincte.
Je le résoudrais en divisant la matrice basée sur * code>, puis remplacant uniquement les indices paires. La correspondance des étoiles déséquilibrées est plus délicate, il consiste à savoir si l'index du dernier élément est impair ou même:
Et si la chaîne contient un * code> qui ne fait pas partie d'une paire? par exemple. 'Le -Quick- * Brown-Box saute.' Code> Si je comprends correctement, dans ce cas, -Quick - code> et -f - code > devrait être remplacé, mais seul le -Quick - code> sera.
@Kenb, il suppose que les étoiles sont bien équilibrées :)
Selon le contexte, c'est une très grande hypothèse.
Vous n'aurez pas besoin de code> rejoindre code> le résultat de la carte code>?
@Kenb qui devrait être réparé maintenant :)
Découvrez si une correspondance est pas em> clôturée par certains délimiteurs est une tâche très compliquée - voir aussi Cette Exemple . Cherchant pourrait aider, mais JS ne prend en charge que regarder Lookahead. Nous pourrions donc réécrire " pas entouré de mais mieux nous correspondons à la fois sur Ceci a l'avantage de pouvoir mieux préciser " em> ", par exemple En ajoutant des limites de mots sur le "intérieur", pour une meilleure gestion de modèles non valides (nombre impair de * caractères mentionnés par @maras par exemple) - la regex actuelle prend juste les deux autres apparitions suivantes. P> P> ~ code> em>" to " suivi d'un numéro un ou ~ em> em>", et Correspond à ce que: - code> et * code>, afin que nous consommons tout ce qui est enveloppé dans * code> s aussi et peut alors décider d'une fonction de rappel de ne pas le remplacer: p>
une version ererser de la réponse très claire de Jack. semble fonctionner,
Bravo. P> P>
Pourquoi le bowvote?
Yup je suis étonné, une si bonne question.
Quoi quand il y a un nombre impair de * caractères? Par exemple.
Le * -Quick- * Brown * -F-OX * saute *. code> quel- code> Les caractères doivent être remplacés et pourquoi?@Maras Le dernier
* code> n'est pas remplacé. Il est imprimé comme* code>Firefox's's
Y CODE> drapeau, DIT être proposé pour ECMAScript 6 aiderait beaucoup: développeur.mozilla.org/en-us/docs/javascript/ Référence / ...