前缀带正则表达式的字符串?

时间:2016-11-14 11:33:44

标签: javascript regex

我使用以下内容在我的asset/img路径前加上一个新字符串,在本例中为my-path

str.replace(/=('|")(\/?assets\/img)/g, "my-path$&");

不幸的是它在=之前提前,所以我得到了类似的东西:

<img srcmypath="/assets/img/image.jpg">

我怎样才能在="后得到它?我得到了:

<img src="mypath/assets/img/image.jpg">

3 个答案:

答案 0 :(得分:1)

首先,我会按如下方式捕获/assets

(\/assets)

然后我将应用以下替换:

my-path$1

所以,如果我原来的句子是:

<img src="/assets/img/image.jpg">

我会得到类似的东西:

<img src="my-path/assets/img/image.jpg">

这是为我的正则表达式生成的代码regex101:

const regex = /(\/assets)/g;
const str = `<img src="/assets/img/image.jpg">`;
const subst = `my-path\$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

更新:如果您只想匹配那些也包含src的行,那么您可以使用以下匹配模式:

(src=")(\/assets)

这就是你要如何取代它:

$1my-path$2

答案 1 :(得分:1)

您可以使用群组在更换后引用您想要的内容。组用括号定义。

str.replace(/(=['"])(\/?assets\/img)/g, '$1mypath$2')
              ^^^^^  ^^^^^^^^^^^^^^      ^^      ^^- text of 2nd group
              1st     2nd group          |       
              group                      text of first group

将导致

<img src="mypath/assets/img/image.jpg">

答案 2 :(得分:0)

你可以先尝试一下。像

(img src=")(\/?)(assets\/img\/)(.*?)(")

然后使用捕获组进行替换,如in this regex101 example

所示

&#13;
&#13;
var testCases = [
	'<img src="assets/img/image.jpg">',
	'<img src="/assets/img/image.jpg">'
]

for(var i=0; i<testCases.length; i++)
{
	console.log(testCases[i].replace(/(img src=")(\/?)(assets\/img\/)(.*?)(")/g, "$1mypath/$3$4$5"));
}
&#13;
&#13;
&#13;