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

时间:2015-07-16 07:07:47

标签: javascript regex string replace

我需要你的帮助再一次使用正则表达式。

我有这个字符串:

  

一些字符串

     

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,还有什么更好用?):

/".*?"/

或:

/"[^"]*"/

但是我如何告诉它替换我需要的?

2 个答案:

答案 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);