替换3个不同字符串之后的双引号之间的字符串

Replace string after 3 different strings and between double quotes

本文关键字:字符串 之间 之后 3个 替换      更新时间:2023-09-26

我再次需要您的regex帮助。

我有这个字符串:

一些字符串

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/nother/path.png"type="jjj">

text2

name="3yu",path="C:''asdf/12t2.mov"type="uuu">

我知道我也需要使用这个(lmk如果我错了,还有什么更好的使用?(:

/".*?"/

或:

/"[^"]*"/

但是我该如何告诉它按照我的需要进行替换呢?

您可以通过以下方式替换该字符串:

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个或多个字符
('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);