2009-08-19 2 views
6

В JavaScript У меня есть строка, содержащая фрагмент DOM. Как мне найти и заменить атрибут src изображения?Регулярное выражение в JavaScript - Заменить атрибут src изображения

Я хотел бы заменить путь всех изображений новым путем, но сохранить имя изображения. Не все пути одинаковы и могут происходить из разных мест. Мои навыки регулярного выражения в лучшем случае бедны.

Например:

Change 

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

into 

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

ответ

7

Попробуйте это:

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

, похоже, не работает. изменения "http://blog.internetnews.com/skerner/smk/testpilot.png" в 'http: //newPath/blog.internetnews.com/skerner/smk/testpilot.png' – redsquare

+0

Это будет сделано. Вам нужно использовать «src = 'newPath/$ 2» в качестве замены – Xetius

+0

Отлично, кажется, делает трюк, приветствует Xetius – redsquare

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

Не могу заставить это работать, это заканчивается «newPath />» – redsquare

+0

, что странно. Это сработало, когда я попробовал это: http://www.regular-expressions.info/javascriptexample.html – Xetius

+0

см. http://pastebin.me/95775a662ddb4f79da1f7beaa1d4749b – redsquare

9

принял ответ илистый и добавил еще несколько вещей, чтобы улучшить его:

  • Если вход строка содержит что-то кроме <img> теги, которые могут иметь a src атрибут - это больше не будет соответствует/заменяет их.

  • Атрибут src может быть с использованием одиночных или двойных кавычек.

  • Тест нечувствителен к регистру.

В результате чего:

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

cheers gnarf. – redsquare

1

При использовании необработанных данных (не-DOM), такие как HTML в виде строки, выше, не соответствует двойные кавычки символов. Этот код может оказаться полезным также:

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

Гораздо лучшее решение –

0

Вышеуказанные решения не работают хорошо в моем случае, когда я должен был заменить все относительный путь к абсолютному пути перед сохранением в БД. Но вот мое решение в случае моей работы для кого-то еще. Приветствия.

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

Я использовал эти выражения в моем проекте, работал как шарм, обрабатывать все случаи, как, цитата, двойные кавычки, несколько тегов изображений в тексте и т.д. В Javascript

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

В PHP

preg_replace('/\<img([^>]*)\ssrc=(\'|\")([^>]*)\2\s([^>]*)\/\>/', "<img$1 src=$2newPath/$3$2 $4/>",$text); 
Смежные вопросы