2016-12-01 7 views
1

Ich habe den Code wie folgt:Javascript - Aufruf Hash-Werte durch regex abgeleiteten Schlüssel

var str = 
    `<doc> 
     <a href="#h-1"> 
     <a href="#h-2"> 
     <a href="#h-3"> 
    </doc> 
    <doc> 
     <a href="#h-9"> 
    </doc>` 

    var veg_anchor_map = new Object(); 
    veg_anchor_map['h-1'] = 'cabbage'; 
    veg_anchor_map['h-2'] = 'potato'; 
    veg_anchor_map['h-3'] = 'carrot'; 


    var href_regex = /<a href="#(.*?)"/g; 
    str = str.replace(href_regex, veg_anchor_map['$1']); 
    console.log(str); 

Ich versuche, alle href Links in meiner str Variable auf diese Syntax zu ersetzen:

//example: 
    <doc> 
     cabbage>; 
     potato>; 
     carrot>; 
    </doc> 

Aber jedes Mal, wenn ich versuche, die Gruppierungen in meiner Regex-Anweisung anzurufen, heißt es, dass es nicht definiert ist. Kann mir jemand dabei helfen? Vielen Dank.

Antwort

2

Verwenden String.replace() Funktion mit Callback-Funktion als zweites Argument:

... 
var href_regex = /<a href="#(.*?)"/g; 
str = str.replace(href_regex, function ($m0, $m1) { 
    return veg_anchor_map[$m1] || $m0; 
}); 
console.log(str); // <doc>cabbage>potato>carrot></doc><doc><a href="#h-9"></doc> 
  • veg_anchor_map[$m1] || $m0 wird einen Ersatzwert aus dem veg_anchor_map Objekt zurück, andernfalls (wenn nicht gefunden) - gibt den aktuellen Match-String
+0

Vielen Dank, funktioniert perfekt wenn integriert! – Basque0407

+0

@ Basque0407, gern geschehen – RomanPerekhrest

Verwandte Themen