我需要你的帮助再一次使用正则表达式。
我有这个字符串:
一些字符串
text1
name =“yyy”,path =“C:/asdf/qwer.jpg”type =“jjj”
text2的
name =“3yu”,path =“C:/asdf/12t2.mov”type =“uuu”
到目前为止我有这个正则表达式:
/\b(string\b(.|\n)*?)\btext1\b/
现在,我需要替换text1
的路径,以便输出:
一些字符串
text1
name =“yyy”,path =“ D:/here/is/my/another/path.png ”type =“jjj”
text2的
name =“3yu”,path =“C:/asdf/12t2.mov”type =“uuu”
我知道我也需要使用它(如果我错了,请使用lmk,还有什么更好用?):
/".*?"/
或:
/"[^"]*"/
但是我如何告诉它替换我需要的?
答案 0 :(得分:1)
您可以这样替换该字符串:
var re = /(string[\s\S]*?text1[\s\S]*?\bpath=")[^"]+/;
var str = 'some string\n\ntext1\n\nname="yyy", path="C:/asdf/qwer.jpg" type="jjj"\n\ntext2\n\nname="3yu", path="C:/asdf/12t2.mov" type="uuu"';
var subst = '$1D:/here/is/my/another/path.png';
document.write(str.replace(re, subst).replace(/\n/g,"<br/>"));
正则表达式是
/(string[\s\S]*?text1[\s\S]*?\bpath=")[^"]+/
<强>说明强>
(string[\s\S]*?text1[\s\S]*?\bpath=")
- 一个捕获组,它将文本捕获到组1中,我们将在稍后引用替换字符串中的$1
反向引用。它匹配:
string
- 文字string
[\s\S]*?
- 任意0个或多个字符,尽可能少text1
- text1
字面意思[\s\S]*?
- 任意0个或多个字符,尽可能少\bpath="
- 在path="
之前将path
字面上与非单词字符(例如空格)匹配(如果它是长字的一部分,则可以将其删除)[^"]+
- 除"
以外的1个或多个字符。答案 1 :(得分:1)
(\bstring\b[\s\S]*?\btext1\b(?:(?!\btext\d+\b)[\s\S])*path=")[^"]*
您可以$1mypath
使用此。替换。请参阅演示。
https://regex101.com/r/fX3oF6/3
var re = /(\bstring\b[\s\S]*?\btext1\b(?:(?!\btext\d+\b)[\s\S])*path=")[^"]*/g;
var str = 'some string\n\n text1\n\n name="yyy", path="C:/asdf/qwer.jpg" type="jjj"\n\n text2\n\n name="3yu", path="C:/asdf/12t2.mov" type="uuu"\n';
var subst = ' $1mypath';
var result = str.replace(re, subst);