2016-11-14 4 views
2

Ich verwende die folgenden, um meine asset/img Pfade mit einer neuen Zeichenfolge, in diesem Fall my-path voranzustellen.Eine Zeichenfolge mit Regex vorgeben?

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

Leider vorangestellt wird es vor der = so bekomme ich so etwas wie:

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

Wie kann ich es vorangestellt bekommen, nachdem der =" So bekomme ich:

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

gezeigt, warum gehst du nicht einfach Gebrauch str.replace ("assets/img", " my-path $ &");. –

Antwort

1

Sie kann Gruppen verwenden, um nach dem Ersetzen auf die gewünschten Dinge zu verweisen. Gruppen sind mit Klammern definiert.

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

führt in

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

+0

Danke, funktioniert und eine schöne Erklärung. – panthro

+0

Es funktioniert nicht mit führenden Schrägstrich, oder? – nozzleman

+0

Es funktioniert gut mit einem führenden Schrägstrich. Der Schrägstrich wird auch in der Gruppe 2 angezeigt, wenn er nicht ignoriert wird. – vincent

1

Zuerst würde ich erfassen /assets wie folgt:

(\/assets) 

Und dann würde ich die folgende Substitution gelten:

my-path$1 

Also, wenn mein ursprünglicher Satz war:

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

Ich mag etwas bekommen:

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

Dies ist der Code regex101 generiert für meinen regulären Ausdruck:

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

UPDATE: Wenn Sie nur die Linien übereinstimmen soll, die auch src enthalten dann können Sie das folgende Anpassungsmuster verwenden:

(src=")(\/assets) 

Und wie würden Sie es ersetzen:

$1my-path$2 
+0

Was wäre, wenn ich andere Teile des Dokuments auf/Assets hätte, dann würde dies auch ersetzt werden, ich versuche nur auf src Pfade zu zielen. – panthro

+0

Ich habe meine Messa aktualisiert ge, um dir zu antworten. –

0

Sie, indem Sie versuchen, etw beginnen konnte. wie

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

und dann für Ihre Ersatz die diesen Gruppen verwenden, wie in this regex101 example

var testCases = [ 
 
\t '<img src="assets/img/image.jpg">', 
 
\t '<img src="/assets/img/image.jpg">' 
 
] 
 

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

Verwandte Themen