2016-10-10 6 views
4

Ich möchte nur einen Teil der Zeichenfolge eines Regex-Muster übereinstimmen ersetzen. Ich fand this answer, aber ich verstehe es nicht ...
Wie verwende ich Substitution?Regex ersetzen nur einen Teil der Übereinstimmung

Beispiel von dem, was ich will: die erste Schnecke Ziffer halten, nur andere ersetzen

/09/small_image/09x/>/09/thumbnail/
1. Platz: unknown digit
2.: "small_image"
3.: unknown digit + "x"

Hier ist, was ich habe so weit:

var regexPattern = /\/\d\/small\_image\/\d*x/; 
var regexPattern = /\/\d\/(small\_image\/\d*x)$1/; ?? 

var result = regexPattern.test(str); 
if (result) { 
    str = str.replace(regexPattern, 'thumbnail'); 
} 
+0

Können Sie klarstellen, was genau Sie mit vollständigen Sätzen tun? Ich entschuldige mich, wenn Englisch ist nicht Ihre Muttersprache – qxz

+0

Danke für die Antwort, tut mir leid Englisch ist nicht meine Muttersprache. Ich möchte wissen, wie man nur Teil der Zeichenkette ersetzt, nicht die ganze Regexmuster-Übereinstimmungsschnur ersetzt. – user1775888

+0

Also die Idee ist, dass die erste '09' und die' 09' in '09x' übereinstimmen müssen? –

Antwort

6

var input = "/09/small_image/09x/"; 
 
var output = input.replace(/(\/\d+\/)small_image\/\d*x/, "$1thumbnail"); 
 
console.log(output);

Erläuterung:

Setzen Sie den Teil, den Sie in Klammern halten wollen, dann auf das beziehen, wie $1 im Ersatz-String - do $1 nicht in Ihrem regulären Ausdruck bringen. So bedeutet (\/\d+\/), dass ein Schrägstrich gefolgt von einer oder mehreren Ziffern gefolgt von einem weiteren Schrägstrich folgt.

(Beachten Sie, dass Sie nicht brauchen, um Unterstrichen in einem regex zu entkommen.)

+0

strenger: '/ \/(\ d +) \/small_image \/\ 1x /' – Tibrogargan

+0

danke für die Erklärung! bedeutet $ 1, dass die Gruppe ein anderer Teil ist als $ 2 $ 3 ... – user1775888

+0

@Tribrotargan - Ich habe überlegt, '\ 1' zu verwenden, aber beachte, dass die Art und Weise, wie du es gezeigt hast, wegen des führenden' \/'innerhalb des Untermatch nicht ganz funktionieren würde. – nnnnnn

0

Go mit

var regexPattern = /(\/\d+\/)small\_image\/\d*x/; 

und

str = str.replace(regexPattern, '$1thumbnail'); 

Erste, können Sie die + fehlten . Weil 09 zwei Ziffern sind, müssen Sie die Regexp mit einer oder mehreren Ziffern übereinstimmen (\ḑ wäre genau eins). Dies wird erreicht durch \d+
Sekunde, alles, was Sie übereinstimmen, wird zuerst entfernt. Um den /09/ Teil danach zurück, muss man sich daran erinnern, indem sie in Klammern in der regexp setzen ( ... ) und danach verweisen sie im Austausch über $1
Man könnte auch andere Gruppen erstellen und verweisen sie durch $2, $3 ...

Verwandte Themen