问题描述
我需要正则表达式再次帮助您。
我有这个字符串:
一些弦
文本1
name =“ yyy”,path =“ C:/asdf/qwer.jpg” type =“ jjj”
文本2
name =“ 3yu”,path =“ C:/asdf/12t2.mov” type =“ uuu”
到目前为止,我有这个正则表达式:
/\b(string\b(.|\n)*?)\btext1\b/
现在,我需要替换text1的路径,以便输出为:
一些弦
文本1
name =“ yyy”,path =“ D:/here/is/my/another/path.png ” type =“ jjj ”
文本2
name =“ 3yu”,path =“ C:/asdf/12t2.mov” type =“ uuu”
我知道我也需要使用它(如果我错了,请使用lmk,还有什么更好用的?):
/".*?"/
要么:
/"[^"]*"/
但是,如何告诉它根据需要替换呢?
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个或更多字符。
2楼
(\bstring\b[\s\S]*?\btext1\b(?:(?!\btext\d+\b)[\s\S])*path=")[^"]*
您可以使用this.Replace $1mypath 。
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);