正则表达式对文本的部分替换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式对文本的部分替换相关的知识,希望对你有一定的参考价值。

在dreamweaver里面想用正则表达式批量替换,但是找是找到了,替换不对,
想把<img src="images/pic_45"
替换为
<img src="media url="catalog/specialproducts/0003860/pic_45"" alt="CUBE U30GT1 Quad Core 10.1 inch IPS Screen android 4.1 Tablet PC 16GB White"
我写.*号就替换为.* 而不是原来的pic_45

参考技术A '<img src="images/pic_45"'.replace(/(<img src=")images(\\/pic_45")/, "$1media url=\\"catalog/specialproducts/0003860$2 alt=\\"CUBE U30GT1 Quad Core 10.1 inch IPS Screen Android 4.1 Tablet PC 16GB White\\"")

考虑到具体情况还是这样好了...

'<img src="images/pic_45"> 其它文本'.replace(/(<img src=")images(.*?")/, "$1media url=\\"catalog/specialproducts/0003860$2\\" alt=\\"CUBE U30GT1 Quad Core 10.1 inch IPS Screen Android 4.1 Tablet PC 16GB White\\"")

参考技术B

简单的js实现:

var s = '<img src="images/pic_45"', reg = /<img\\s+src="images\\/(pic_45)"/g;
s = s.replace(reg, function(a, b)return '<img src="media url="catalog/specialproducts/0003860/' + b + '" alt="CUBE U30GT1 Quad Core 10.1 inch IPS Screen Android 4.1 Tablet PC 16GB White"');
alert(s)

追问

关键是批量的,除了pic_45还有很多pic_....

追答var s = '<img src="images/pic_45"', reg = /<img\\s+src="images\\/(pic_\\S+)"/g;
s = s.replace(reg, function(a, b)return '<img src="media url="catalog/specialproducts/0003860/' + b + '" alt="CUBE U30GT1 Quad Core 10.1 inch IPS Screen Android 4.1 Tablet PC 16GB White"');
alert(s)

参考技术C <img src="images/pic_45"(.*?>)
<img src="media url="catalog/specialproducts/0003860/pic_45""$1

正则表达式查找/替换不同长度的文本

【中文标题】正则表达式查找/替换不同长度的文本【英文标题】:Regex to find/replace text of varying length 【发布时间】:2020-09-14 08:01:39 【问题描述】:

我们在项目中使用了第三方专有软件。在两个主要版本之间,供应商决定限制对其中一种方法的访问,并提供具有不同签名的替代方法名称。示例如下图

Object obj;

Old way: Method_A(obj);

New way: obj.Method_B();

是否可以在 linux sed 中使用正则表达式进行查找/替换?

例如:

Method_A( abc ); ==> abc .Method_B();强>

Method_A( m ); ==> m .Method_B();强>

Method_A( xyz123 ); ==> xyz123 .Method_B();强>

这是我迄今为止尝试过的:

grep -R "Method_A(" . | sed -i 's/Method_A(^.1,50$/_____.Method_B(/g"

无论我尝试为 _____ 指定什么,我都无法达到预期的结果。

【问题讨论】:

如果() 中有空格,请尝试sed -E 's/Method_A\(([^)]+)\)/\1.Method_B()/' filesed -E 's/Method_A\( *([^) ]+) *\)/\1.Method_B()/' file grep -R "Method_A(" . | sed 's/Method_A([[:space:]]\(.*\)[[:space:]])/\1.Method_B()/' 【参考方案1】:

您可以使用以下 POSIX BRE sed 正则表达式:

sed 's/Method_A( \(.*\) );/\1.Method_B();/g'

如果您需要在 (); 之间应用 1 到 50 个字符,请使用

sed 's/Method_A( \(.\1,50\\) );/\1.Method_B();/g'

详情

Method_A( - 匹配 Method_A( 子字符串 \(.*\) - 捕获组 1(在替换模式部分使用 \1 反向引用引用):任意 0 个或更多字符,尽可能多 ); - ); 子字符串

查看online sed demo:

sed 's/Method_A( \(.*\) );/\1.Method_B();/g' <<< 'Method_A( abc );' # ==> abc.Method_B();
sed 's/Method_A( \(.*\) );/\1.Method_B();/g' <<< 'Method_A( m );' # ==> m.Method_B();
sed 's/Method_A( \(.*\) );/\1.Method_B();/g' <<< 'Method_A( xyz123 );' # ==> xyz123.Method_B();

【讨论】:

以上是关于正则表达式对文本的部分替换的主要内容,如果未能解决你的问题,请参考以下文章

tcl 正则匹配与替换

正则表达式中分组功能高级用法

如何使用 javascript 正则表达式替换 URL 的主机部分

正则表达式查找/替换不同长度的文本

正则表达式-1

使用捕获搜索和替换正则表达式