2009-08-19 49 views
6

Trong JavaScript Tôi có một chuỗi chứa đoạn DOM. Làm cách nào để tìm và thay thế thuộc tính src của hình ảnh?Cụm từ thông dụng trong JavaScript - Thay thế thuộc tính src

Tôi muốn thay thế đường dẫn của tất cả hình ảnh bằng một đường dẫn mới nhưng vẫn giữ tên hình ảnh. Không phải tất cả các đường dẫn đều giống nhau và có thể đến từ nhiều địa điểm khác nhau. Kỹ năng diễn đạt thông thường của tôi kém nhất.

Ví dụ:

Change 

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

into 

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

Trả lời

7

Hãy thử điều này:

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

dường như không hoạt động. thay đổi 'http://blog.internetnews.com/skerner/smk/testpilot.png' thành 'http: //newPath/blog.internetnews.com/skerner/smk/testpilot.png' – redsquare

+0

Điều này sẽ thực hiện. Bạn cần sử dụng "src = 'newPath/$ 2'" làm thay thế – Xetius

+0

Tuyệt vời, có vẻ như là lừa, chúc mừng Xetius – redsquare

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

không thể làm điều này để làm việc, nó kết thúc với "newPath />" – redsquare

+0

đó là lẻ. Nó làm việc khi tôi thử nó trong này: http://www.regular-expressions.info/javascriptexample.html – Xetius

+0

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

9

Đã trả lời gumbo và bổ sung thêm một vài điều để cải thiện nó:

  • Nếu đầu vào chuỗi chứa một cái gì đó khác với các thẻ <img> có thể có thuộc tính src - điều này sẽ không còn đối sánh/thay thế chúng nữa.

  • Thuộc tính src có thể là sử dụng dấu nháy đơn hoặc kép.

  • Thử nghiệm không phân biệt chữ hoa chữ thường.

Hệ quả là:

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

cổ vũ gnarf. – redsquare

1

Nếu sử dụng nguyên liệu (không DOM) dữ liệu như HTML dưới dạng chuỗi, ở trên không phù hợp với ký tự dấu nháy kép. Mã này cũng có thể hữu ích:

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

Giải pháp tốt hơn nhiều –

0

Các giải pháp trên không hoạt động tốt trong trường hợp của tôi, nơi tôi phải thay thế tất cả đường dẫn tương đối thành đường dẫn tuyệt đối trước khi lưu trữ trong DB. Nhưng đây là giải pháp của tôi trong trường hợp tôi làm việc cho bất cứ ai khác. Chúc mừng.

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

tôi đã sử dụng những biểu hiện trong dự án của tôi, làm việc như quyến rũ, xử lý tất cả các trường hợp như thế, báo giá, báo giá gấp đôi, nhiều thẻ hình ảnh trong văn bản vv Trong Javascript

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

Trong PHP

preg_replace('/\<img([^>]*)\ssrc=(\'|\")([^>]*)\2\s([^>]*)\/\>/', "<img$1 src=$2newPath/$3$2 $4/>",$text); 
Các vấn đề liên quan