J'ai une chaîne comme celle-ci https://images.pexels.com/photos/459225/pexels-photo-459225.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500 et j'ai besoin pour définir si ce lien image ou non.
J'ai trouvé l'expression régulière /(http(s?):)([/|.|\w|\s|- )*\.(?:jpg|gif|png)/g code> qui définit l'image si le lien a un format approprié à la fin, mais cette expression régulière ne fonctionne pas avec un tel lien https://images.pexels.com/photos/459225/pexels-photo-459225.jpeg? auto = compress & cs = tinysrgb & dpr = 1 & w = 500
Je ne suis pas familier avec les expressions régulières, alors pouvez-vous m'aider à améliorer cette expression régulière et définir un tel lien. Merci
5 Réponses :
Modifiez simplement l'expression régulière comme ceci:
/(http(s?):)([\/|.|\w|\s|-])*\.(?:jpg|jpeg|gif|png)/g
J'ai voté contre parce que le modèle n'est pas valide, essayez-le sur regex101.com
Bon ok mais l'expression originale est également invalide
@DominikMatis [/] est valide une fois que vous avez sélectionné le bon moteur . Pas besoin de se précipiter avec un vote négatif.
Vous devez échapper à ce / dans l'expression régulière, donc c'est correct
/(http(s?):)([\/|.|\w|\s|-])*\.(?:jpg|jpeg|gif|png)/g
Dans la plupart des implémentations de regex JS, dans une classe de caractères à l'intérieur d'un littéral regex, / sans échappement est valide.
Vous pouvez raccourcir considérablement votre expression existante en réduisant certains de vos groupes de capture, ainsi qu'en supprimant les caractères pipe de votre jeu de caractères [] . Les jeux de caractères se comportent automatiquement comme des instructions "OR" sans utiliser de tuyaux.
/(https?:)([\/.\w\s-])*\.(?:(jpe?|pn)g|gif)/gi
Pour disséquer cette expression et voir pourquoi elle fonctionne, regardez-la sur RegExr .
Cette expression régulière est trop restrictive car la validation de domaine est peu performante, vous pouvez donc la desserrer comme ceci:
https?:\/\/[^.]*?(\.[^.]+?)*\/.*?\.(jpg|jpeg|gif|png)
Vous pouvez utiliser URL api et test
let str = `https://images.pexels.com/photos/459225/pexels-photo-459225.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500`
let str2 = `https://images.pexels.com/photos/459225/pexels-photo-459225.exe?auto=compress&cs=tinysrgb&dpr=1&w=500`
let isImage = (str) =>{
let parsed = new URL(str)
return /(?:jpe?g|gif|png)$/i.test(parsed.pathname)
}
console.log(isImage(str))
console.log(isImage(str2))
Vous avez un caractère
/non échappé dans l'expression régulière@DominikMatis
[/]est valide dans les littéraux de regex dans la plupart des JS implémentations de regex.