正则表达式对文本的部分替换
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
考虑到具体情况还是这样好了...
'<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()/' file
和sed -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();
【讨论】:
以上是关于正则表达式对文本的部分替换的主要内容,如果未能解决你的问题,请参考以下文章