2016-05-31 23 views
-1

Ich habe eine Zeichenfolge etwas wie folgt aus:Suchen und Ersetzen Teilzeichen nach regex

var str = 'Foo faa {{as56asdjhw76234564}} {{ehksfd1238548dsah}}' 

Ich brauche den Text zwischen Klammern durch eine Teilkette zu ersetzen, die in so etwas wie führen:

Foo faa {{Question 1}} {{Question 22}} 

Aber, mein Problem ist, wie suche ich nach diesem Teilstring? Innerhalb der Klammern können nur Ziffern und Alphabete stehen.

+0

Wo Sie stecken bleiben? Um '{{something}}' zu finden, verwenden Sie eine Regexp der Form '/ {{something}} /'. Wenn etwas eine Folge von alphanummerischen Zeichen ist, können Sie '[a-z0-9] +' oder '\ w +' schreiben, wenn es Ihnen nichts ausmacht, Unterstriche einzufügen. Um die Groß-/Kleinschreibung unabhängig von der Groß- und Kleinschreibung zu machen, fügen Sie die Flags "ig" hinzu. Um die Regexp zu ersetzen, verwenden Sie 'String # ersetzen '. Dies ist nur grundlegende Regexp-Schreiben, die in jedem Anfang Regexp-Tutorial behandelt werden würde. –

Antwort

2

Verwenden Sie replace() Methode mit Regex für das Abgleichen und Ersetzen.

var str = 'Foo faa {{as56asdjhw76234564}} {{ehksfd1238548dsah}}', 
 
    rep = [1, 22], 
 
    i = 0; 
 

 
console.log(
 
    str.replace(/{{[a-z0-9]+}}/ig, function() { 
 
    return '{{Question ' + rep[i++] + '}}' 
 
    }) 
 
)

+0

Warum ist das Fragezeichen in '+?' Notwendig? –

+0

@torazaburo: um die kleinste mögliche Übereinstimmung zu bekommen ... sonst '{{as56asdjhw76234564}} {{ehksfd1238548dsah}}' wird gematched, bitte hier https://regex101.com/r/rF1pT0/1 –

+0

Nein, es hat gewonnen ' t, weil die dazwischenliegenden Zeichen nicht mit '[a-z0-9]' übereinstimmen. –

0

Versuchen Sie, die folgenden regulären Ausdruck:

\{{2}([a-zA-Z0-9]+)\}{2} 

können Sie dann verwenden, um die replace Methode mit einem Callback-Argument, wie:

let questionIndex = 0; 
myString.replace(/\{{2}([a-z0-9]+)\}{2}/gmi, 
    function (fullExpression, matchedGroup1) { 
    // NOTE fullExpression is {{abc} for example 
    //  matchedGroup1 is the 'abc' itself 

    questionIndex++; 

    return `{{Question ${questionIndex}}}`; 
    } 
); 

Siehe nachstehendes Beispiel :

https://jsfiddle.net/xb3q63y9/

Auch für Regexp, gibt es dieses nützliche Werkzeug Regex101 genannt, wirklich hilfreich, wenn Sie eine bestimmte Zeichenfolge müssen angepasst werden:

https://regex101.com/r/sK7qZ0/2

+0

Kleinigkeit vielleicht, aber er will nicht Frage 1 und Frage 2, er möchte Frage 1 und Frage 22, wobei 1 und 22 vermutlich aus einer Liste von Ersatzfragenummern stammen. Auch warum die "m" Flagge? –