Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
757 connectés 

  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  Soucis Regex et string.search javascript

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Soucis Regex et string.search javascript

n°2334949
Hig2
Posté le 12-06-2019 à 00:14:22  profilanswer
 

Salut!
 
Je rencontre un soucis en ce moment en javascript. Je souhaiterai récupérer du texte entre deux balises <url> et </url>.
Pour faire ça, j'ai écris le code suivant:
 
(result contient une phrase du style <url>blablabla</url> )
url = result.search('<url>(.*?)<\/url>')
 
Le soucis, c'est que url contient constamment 0, peut importe ce que je rentre comme phrase.
 
Une idée?
Merci!


---------------
----** Mon feed-back **----
mood
Publicité
Posté le 12-06-2019 à 00:14:22  profilanswer
 

n°2334952
MaybeEijOr​Not
but someone at least
Posté le 12-06-2019 à 09:27:35  profilanswer
 

Bonjour,
 
Dans ce cas là, je pense que la méthode string.exec est plus appropriée. De plus à quoi sert ton point d'interrogation dans ton regex ? Tu peux l'enlever, l'astérisque fait déjà le taff.
Il est aussi possible que tu aies besoin de préciser le flag de multiligne en fonction de ta chaîne de caractères.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2334956
gatsu35
Posté le 12-06-2019 à 12:32:07  profilanswer
 

MaybeEijOrNot a écrit :

Bonjour,
 
Dans ce cas là, je pense que la méthode string.exec est plus appropriée. De plus à quoi sert ton point d'interrogation dans ton regex ? Tu peux l'enlever, l'astérisque fait déjà le taff.
Il est aussi possible que tu aies besoin de préciser le flag de multiligne en fonction de ta chaîne de caractères.


le point d'interrogation c'est pour faire en sorte que le * soit lazy et non greedy : https://www.rexegg.com/regex-quantifiers.html
 
Sinon tu récupères tout entre le premier <url> et le dernier </url> de la string, et donc même les autres <url> et </url> qui trainent

n°2334961
MaybeEijOr​Not
but someone at least
Posté le 12-06-2019 à 13:41:57  profilanswer
 

Merci, je ne savais pas qu'on pouvait faire ça comme ça, sur le moteur PCRE j'utilise le flag U pour "Ungreedy" mais ce dernier n'existe pas sur le moteur JS.


Message édité par MaybeEijOrNot le 12-06-2019 à 13:42:27

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2335023
Hig2
Posté le 12-06-2019 à 19:58:12  profilanswer
 

Merci pour vos réponses, j'avance mais je galère toujours.
J'ai changé de méthode js, j'utilise string.match qui a l'air d'être plus faite pour ça.
 
Sur https://regex101.com/, quand je mets cette chaîne: <url>(.*?)<\/url>
et que je teste par exemple <url>test</url> ça fonctionne et me sort bien "test".
 
Par contre, quand le fais la même chose dans mon code js avec
result.match('<start>(.*?)<end>'), ça ne fonctionne pas...
 
EDIT: autant pour moi! En fait ça fonctionne, mais le résultat est un tableau avec en position 0, la phrase entière et en position 1 ce qui est réellement entre les deux balises... :)


Message édité par Hig2 le 12-06-2019 à 20:02:07

---------------
----** Mon feed-back **----
n°2335024
gatsu35
Posté le 12-06-2019 à 20:24:47  profilanswer
 

exactement string.match est vraiment faite pour ça
 
et

Code :
  1. result.match('<start>(.*?)<end>')


c'est pas un expression régulière hein

n°2335030
Hig2
Posté le 12-06-2019 à 21:46:21  profilanswer
 

Heu oui pardon, c'est un vieux morceau de code que j'avais testé, c'est plutôt celui-ci que j'utilise actuellement:
result.match('<url>(.*?)</url>')
 
Mais pourquoi dis-tu que ce n'est pas une expression régulière?


Message édité par Hig2 le 12-06-2019 à 21:46:49

---------------
----** Mon feed-back **----
n°2335036
gatsu35
Posté le 12-06-2019 à 23:05:03  profilanswer
 

parce que String.match prend en paramètre une expression régulière et là tu lui balances une chaîne de caractère.
Le mieux c'est de faire ça  :

Code :
  1. string.match(/<url>(.*?)<\/url>/)
 

D'ailleurs combien veux-tu récupérer de <url></url> dans ta string ?
Car si tu veux tous les récupérer le flag /g est mieux et si tu ne veux garder que le contenu il faudra passer par deux étapes, un match puis un map .

 
Code :
  1. var reg = /<url>(.*?)<\/url>/g;
  2. var result = ("<url>fdsfsdfsd</url>sdfsdf<url>totot</url>".match(reg) || []).map(function(str) {
  3. return str.replace(reg, '$1');
  4. });
 

Sinon il y a d'autres solutions :

Code :
  1. var result;
  2. var str = "<url>fdsfsdfsd</url>sdfsdf<url>totot</url>";
  3. var regex = /<url>(.*?)<\/url>/g;
  4. // ==============================
  5. result = (str.match(regex) || []).map(function(str) {
  6.   return str.replace(regex, "$1" );
  7. });
  8. // ==============================
  9. result = [];
  10. str.replace(regex, function(a, match) {
  11.   result.push(match);
  12. });
  13. // ==============================
  14. result = Array.from(str.matchAll(regex), function(x) {
  15.   return x[1];
  16. });
  17. // ==============================
  18. console.log(result);


Message édité par gatsu35 le 12-06-2019 à 23:19:25
n°2335045
Hig2
Posté le 13-06-2019 à 07:17:06  profilanswer
 

Merci gatsu35 :)
Je ne souhaite récupérer qu'un seul flag. C'est pour faire des tests sur une réponse en ajax et rediriger l'utilisateur en fonction de ce qui est entre les balises.
Si la réponse ajax contient <url> alors je récupère ce qui est entre les deux balises url et je redirige vers cette page. La string sera donc toujours de ce type <url>page vers laquelle faire la redirection</url>.


---------------
----** Mon feed-back **----
n°2335051
MaybeEijOr​Not
but someone at least
Posté le 13-06-2019 à 09:20:44  profilanswer
 

Si tu as la main sur la réponse, une réponse sous forme Json sera plus facile à traiter.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

  Soucis Regex et string.search javascript

 

Sujets relatifs
Nettoyage HTML avec regex negative lookaheadREGEX besoin d'aide
Comment "nommer" un objet pour le retrouver (String) ?[Résolu] Timer Javascript - Changer temps de base
Regex pour nombresPassage de paramètre du PHP au Javascript
REGEX, ExtracPDF, et dictionnaire[JAVASCRIPT] JSON.parse()
[HTML/CSS][JavaScript] Récupérer un ID sur une autre page WebSoucis avec script overlay.
Plus de sujets relatifs à : Soucis Regex et string.search javascript


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR