当前位置: 代码迷 >> JavaScript >> 在3个不同的字符串之后以及双引号之间替换字符串
  详细解决方案

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

热度:39   发布时间:2023-06-07 16:40:12.0

我需要正则表达式再次帮助您。

我有这个字符串:

一些弦

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

/".*?"/

要么:

/"[^"]*"/

但是,如何告诉它根据需要替换呢?

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

 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=")[^"]*

您可以使用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);
  相关解决方案