J'essaie de comprendre comment puis-je extraire une URL de la chaîne suivante dans JS.

var str = '[velocity type="youtube" id="239793212" img="http://website.com/wp-content/uploads/image-placeholder.jpg" alt="Play" color="#FFFFFF" bkg_color="transparent"]';

Je voudrais en quelque sorte extraire uniquement la valeur http://website.com/wp-content/uploads/image-placeholder.jpg de ce shortcode WordPress qui est lu par l'éditeur WordPress TinyMCE.

Je dois ajouter que la chaîne ne sera pas toujours au format exact et que la position de img="" fluctuera.

Existe-t-il un moyen d'analyser cette chaîne en tant que JSON ou tableau afin que je puisse accéder à la valeur de img?

0
Darren Cooney 6 mars 2016 à 18:59

3 réponses

Meilleure réponse
/img="([^"]*)"/.exec(str)[1]

En anglais: créez une expression régulière qui correspond à la partie img, mettez l'URL dans le groupe 1 et après avoir exécuté l'expression sur la chaîne, récupérez le contenu du groupe 1.

L'expression se décompose comme

img="        # the string 'img="'
(            # begin group 1
  [^"]*      #   any character that is not a '"', any number of times
)            # end group 1
"            # the final double quote

Documentation pertinente: RegExp.prototype.exec() sur le MDN et bien sûr le principal site d'informations sur les expressions régulières: http://www.regular-expressions.info /.

4
Tomalak 6 mars 2016 à 16:10

Votre meilleur pari est une expression régulière.

var regEx= /"http:\/\/.+?"/g; //If you want to extract all urls.
var imgEx= /img=".+?"/g // If you want to extract all img parameters.
0
Rajaprabhu Aravindasamy 6 mars 2016 à 16:05

Une façon pas si OO de le faire:

var str = '[velocity type="youtube" id="239793212" img="http://website.com/wp-content/uploads/image-placeholder.jpg" alt="Play" color="#FFFFFF" bkg_color="transparent"]';

var url = null;
str.split(' ').forEach(function(s){
  if(s.indexOf('img') > -1) {
    url = s.split("=")[1]
  }
})
// url now contains your url
console.log(url);

Ou en une ligne:

var url = str.split(' ').filter(function(s){ return s.indexOf('img') > -1})[0].split("=")[1]
1
cl3m 6 mars 2016 à 16:11