Dans JavaScript, j'ai une chaîne contenant un fragment DOM. Comment puis-je trouver et remplacer l'attribut SRC d'une image?
Je voudrais remplacer le chemin de toutes les images avec un nouveau chemin, mais en conservant le nom de l'image. Tous les chemins ne sont pas identiques et peuvent provenir de divers endroits. Mes compétences d'expression régulières sont au mieux pauvres. P>
Par exemple: P>
Change <img src='path/to/image/name.jpg' /> into <img src='newPath/name.jpg' />
6 Réponses :
Essayez ceci:
str.replace(/src='(?:[^'\/]*\/)*([^']+)'/g, "src='newPath/$1'");
ne semble pas fonctionner. Modifications ' blog.internetnews.com/skerner/smk/testpilot.png ' dans ' NewPath / blog.internetnews.com / skerner / smk / testpilot.png < / a> '
Ça fera. Vous devez utiliser "src = 'newPath / 2 $" "comme remplacement
Édité la réponse pour résoudre ce problème
Ah, cela fonctionne pour une image mais ne correspond pas à toutes les images. Est-ce possible
@redsquare: juste oublié un quantificateur et le drapeau global. Et le 1 $ code> est i> correct.
replace(/(.*)\/(.*)/, "newPath/$2");
c'est étrange. Cela a fonctionné quand je l'ai essayé dans ceci: régulier-expressions.info/javascriptexample.html
a pris la réponse de Gumbo et ajouté quelques autres choses à l'améliorer:
si la chaîne d'entrée contient quelque chose
autre que Le Le test étant insensible à la casse. p> li>
ul> résultant: p> code> tags pouvant avoir
un attribut
src code> - cela ne sera plus
correspond / remplacez-les. P> li>
src code> peut être
Utilisation de citations simples ou doubles. P> li>
Si l'utilisation de données brutes (non dom) telles que HTML sous forme de chaîne, ci-dessus ne correspond pas à des caractères à double citation. Ce code peut également s'avérer utile:
root = serviceURL("file") + "&src=" + encodeURIComponent(root);
// html itself
html = html.replace(/src=['"](?:[^"'\/]*\/)*([^'"]+)['"]/g, "src='" + root + "/$1'");
Beaucoup mieux solution
Les solutions ci-dessus ne fonctionnent pas bien dans mon cas, où j'ai dû remplacer tout chemin relatif au chemin absolu avant de le stocker dans dB. Mais voici ma solution au cas où le mien travaille pour quelqu'un d'autre. Bravo.
replace(/<img([^>]*)\ssrc=(['"])(\/[^\2*([^\2\s<]+)\2/gi, "<img$1 src=$2" + BaseURL + "$3$2");
J'ai utilisé ces expressions dans mon projet, travaillé comme charme, gérant tous les cas tels que, citation, double citation, balises d'image multiples dans le texte, etc.
Dans javascript dans php p>