Je suis un peu désemparé de la tâche suivante. Je souhaite sélectionner un texte entre "que c'est à l'intérieur d'une balise mais pas à l'extérieur de la balise, c'est-à-dire une sélection à l'intérieur d'une autre sélection.
J'ai la balise suivante: <| et |> et je veux sélectionner un texte uniquement si c'est entre le "et entre les balises. p>
<| bla bla bla " doit être sélectionné strong>" non sélectionné " P> P> P> Je pense que quelque chose à propos de p> mais cela ne fonctionne pas. P> p>
4 Réponses :
Je l'ai fait correspondre correctement en utilisant deux regexes.
p> var input = '<|a "b"|>c "d"ef<|"g"h "i"|>"j"k l';
var output=input.match(/<\|(.*?)\|>/g)
.map(function(x){return x.match(/"(.*?)"/g)})
alert(output)
Les quantifiers gourmands * code> vont manger la première paire de <| code>, |> code> si plusieurs sont présents: REGEX101.com/R/WI4LF2/1
@Jan HM, cela semble être le problème. Testé à l'aide de l'exemple de OP.
@Jan édité: comme réponse mentionnée JavaScript, utilisée :)
Essayez-le avec des look-derrière-derrière et des regards: voici un Démo en direct . P> < / p>
p>
@fardjad Oh, tu as raison. La réponse de Nicael échoue à votre exemple aussi. Avez-vous de meilleures suggestions?
Oui, mais pas avec une seule regex, je posterai ma solution dans une minute.
C'est étrange ... je m'attendrais à ce que cela ne correspond à ce que ce soit uniquement le "test" code> partie de l'exemple de FARDJAD (au lieu de faire correspondre trop souvent), car vous ne permettez qu'un seul caractère entre le | code > et ouverture " code>, et un seul caractère entre la fermeture " code> et | code>. Pythex.org semble être d'accord ... Est-ce que le bogue debuggex, un bug Pythex ou autre chose?
Je ne peux pas penser à une expression régulière Pour correspondre à ce que vous voulez dans un seul coup mais je ne vois pas la raison pour ne pas le faire avec deux regexps:
p>
<div id="result"></div>
Cela fera le travail dans une seule regex: p>
En plus d'un commentaire de Nicael: il pourrait être possible que la chaîne d'entrée ne soit pas étiquetée correctement. Cela aidera: P>
(? <= <\ | ((((?! \ |).) "[^" ] * " code> p>
Si vous devez l'utiliser avec JavaScript: P>
(? = ("[^"] * "[^"] *) " "] *" (? = (((?! <\ |).) * \ |>) code> p>
A l'air super, mais pourquoi ne fonctionne pas là ? Sur mobile, je ne peux pas obtenir l'erreur d'être affichée.
Trouvé un problème dans votre regex:
@nicael j'ai ajouté une regex qui résout le deuxième problème. Mon regex fonctionnera avec .NET Regex. Votre échantillon de poing montre que regarder derrière les assertions ne sont pas autorisés dans JavaScript. Pardon. Qu'est-ce que c'est? Il y a une regex qui ne supporte pas de regarder derrière? J'essaie de trouver une solution qui fonctionne avec des assertions à venir.
@nicael sera (? = ("[^"] * "[^"] *) " ^ "] *" (? = ((((?! <\ | \ |).) * \ | \ |>) code> soit une solution possible? Il semble étrange si vous supprimez le | code > du premier jeton de clôture mais peut-être que ça va.
Celui-ci semble être parfait!
@nicael La regex dans ma réponse modifiée résout le problème que vous avez posté dans le deuxième commentaire.
@nicael Avez-vous même lu la question? OP veut sélectionner des valeurs entre les guillemets uniquement si ses balises intérieures
<| code>|> code>Oui, ce n'est pas un dupliqué, je ne veux pas sélectionner de texte à l'intérieur "", je souhaite sélectionner un texte à l'intérieur "" et <| |> et sa JS et C #
@ Kkazemakhgary Peu importe, solution facilement réglable. Vous imaginez que
<| code> et|> code> sont des citations et améliorent la regex.@nicael Vous souhaitez-vous élaborer la solution facile?
@nicael je ne pense pas que son facile ajustable. Si c'est facile pour vous, cela ne signifie pas facile pour tout le monde.