2009-08-19 14 views
6

En JavaScript tengo una cadena que contiene un fragmento DOM. ¿Cómo encontraría y reemplazaría el atributo src de una imagen?Expresión regular en JavaScript - Reemplazar el atributo src de la imagen

Me gustaría reemplazar la ruta de todas las imágenes con una nueva ruta pero manteniendo el nombre de la imagen. No todos los caminos son iguales y pueden provenir de varios lugares. Mis habilidades de expresión regular son pobres en el mejor de los casos.

Por ejemplo:

Change 

    <img src='path/to/image/name.jpg' /> 

into 

    <img src='newPath/name.jpg' /> 

Respuesta

7

Prueba esto:

str.replace(/src='(?:[^'\/]*\/)*([^']+)'/g, "src='newPath/$1'"); 
+0

parece que no funciona. cambia 'http://blog.internetnews.com/skerner/smk/testpilot.png' en 'http: //newPath/blog.internetnews.com/skerner/smk/testpilot.png' – redsquare

+0

Lo hará. Necesita usar "src = 'newPath/$ 2'" como el reemplazo – Xetius

+0

Excelente, parece ser el truco, vitorea a Xetius – redsquare

1
replace(/(.*)\/(.*)/, "newPath/$2"); 
+0

no puede hacer que esto funcione, termina con "newPath />" – redsquare

+0

que es extraño. Funcionó cuando lo probé en esto: http://www.regular-expressions.info/javascriptexample.html – Xetius

+0

ver http://pastebin.me/95775a662ddb4f79da1f7beaa1d4749b – redsquare

9

Tomó la respuesta de gumbo y ha añadido algunas cosas más para mejorarlo:

  • Si la entrada la cadena contiene algo distinto de <img> etiquetas que pueden tener un atributo src - esto ya no coincidirá con .

  • El atributo src puede ser mediante comillas simples o dobles.

  • La prueba es insensible a las mayúsculas y minúsculas.

El resultado es:

string.replace(/<img([^>]*)\ssrc=(['"])(?:[^\2\/]*\/)*([^\2]+)\2/gi, "<img$1 src=$2newPath/$3$2"); 
+0

aplausos gnarf. – redsquare

1

Si se utilizan datos crudos (no-DOM), tales como HTML en forma de cadena, no coincide con caracteres de comillas dobles. Este código puede ser útil, también:

root  = serviceURL("file") + "&src=" + encodeURIComponent(root); 
// html itself 
html  = html.replace(/src=['"](?:[^"'\/]*\/)*([^'"]+)['"]/g, "src='" + root + "/$1'"); 
+0

Solución mucho mejor –

0

Las soluciones anteriores no funciona bien en mi caso, donde tenía que reemplazar toda la ruta relativa a la ruta absoluta antes de guardarla en la base de datos. Pero aquí está mi solución en caso de que el mío funcione para cualquier otra persona. Aclamaciones.

replace(/<img([^>]*)\ssrc=(['"])(\/[^\2*([^\2\s<]+)\2/gi, "<img$1 src=$2" + BaseURL + "$3$2"); 
0

utilicé estas expresiones en mi proyecto, trabajó como encanto, el manejo de todos los casos como, cita, comillas dobles, múltiples etiquetas de imagen en el texto etc. En Javascript

text.replace(/\<img([^>]*)\ssrc=('|")([^>]*)\2\s([^>]*)\/\>/gi, "<img$1 src=$2newPath/$3$2 $4/>"); 

En PHP

preg_replace('/\<img([^>]*)\ssrc=(\'|\")([^>]*)\2\s([^>]*)\/\>/', "<img$1 src=$2newPath/$3$2 $4/>",$text); 
Cuestiones relacionadas