2009-08-19 44 views
6

在JavaScript中,我有一个包含DOM片段的字符串。我如何找到并替换图像的src属性?JavaScript中的正则表达式 - 替换Image 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 2009-08-19 08:50:12

+0

它会这样做。你需要使用“src ='newPath/$ 2'”作为替换 – Xetius 2009-08-19 08:51:38

+0

优秀的,似乎是做的伎俩,欢呼Xetius – redsquare 2009-08-19 08:54:14

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

不能得到这个工作,它结束了“newPath />” – redsquare 2009-08-19 08:48:04

+0

这很奇怪。当我在这里尝试它时它工作:http://www.regular-expressions.info/javascriptexample。html – Xetius 2009-08-19 08:56:18

+0

看到http://pastebin.me/95775a662ddb4f79da1f7beaa1d4749b – redsquare 2009-08-19 09:04:05

9

拿了秋葵的答案,并增加了一些事情,以改善它:

  • 如果输入字符串包含东西除<img>以外的其他标签可能有 a src属性 - 这将不再与 匹配/替换它们。

  • src属性可能是 使用单引号或双引号。

  • 该测试不区分大小写。

在所得:

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

干杯gnarf。 – redsquare 2009-08-21 08:34:24

1

如果以字符串形式使用原始(非DOM)数据,诸如HTML,上述不匹配双引号字符。此代码可能证明是有用的,太:

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

更好的解决方案 – 2017-11-01 16:40:57

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);