2016-06-27 4 views
0

Ich mache ein grundlegendes System, um einige Zeichen zu ersetzen.Hex-Code in der jquery-Vorschau nicht ersetzen

Beispiel:

\ t - Ersetzen für Tabula Größe 4 \ n - Ersetzen für

dies sehr gut funktioniert, aber, wenn ein Hex-Code ersetzt wird (In diesem Fall ist das Format : {FFFFFF}) funktioniert nicht, wenn der Code auf Pos 1 oder mehr steht. Nur funktionieren, wenn der Code in der ersten Position von String der Textbox

enter image description here

code =

$(document).ready(function() 
{ 
    $('#dialog_edit_input').keyup(function() 
    { 
     var val = $(this).val(); 
     var start = -1, end = -1; 
     // Backspaces (\t, \n) 
     val = val.replace(/\\n/g, "<br />"); 
     val = val.replace(/\\t/g, "<p class=\"create_t\"></p>"); 

     // Extraer colores hex PAWN 
     start = val.search("{"); 
     end = val.indexOf("}", (start != -1 ? start+6 : 0)); 

     var is_posible = ((start != -1 && end != -1) && end == start + 7); 
     var _color_real = is_posible ? val.substr(start, end+1) : null; 
     var _color = _color_real != null ? _color_real.substr(1, _color_real.length-2) : null; 

     if(is_posible) 
      val = val.replace(_color_real, "<span style=\"color: #" + _color + "\">"); 

     console.log(end); 
     $('#agregar_resultado').html(val); 
    }); 
}); 

Antwort

1

Sie können einen regulären Ausdruck verwenden, wie Sie für die anderen Substitutionen tat:

val = val.replace(/\{([0-9A-Fa-f]{6})\}/g, '<span style="color: #$1">'); 

Anmerkungen:

  1. Die Klammern im regulären Ausdruck erstellen eine Gruppe. Das bedeutet, dass die sechs Hexadezimalziffern die erste (und einzige) Gruppe bilden. Beachten Sie, dass die Klammern nicht in den Klammern stehen. Sie sind notwendig, damit ein Spiel stattfindet, aber sie sind nicht Teil der Gruppe.
  2. Die $1 in der Substitutionszeichenfolge wird durch den Wert der ersten übereinstimmenden Gruppe ersetzt, die in diesem Fall die sechs Hexadezimalziffern ist.

jsfiddle


Was, warum Ihr Code geschrieben nicht funktioniert, suchen Sie nur ein Vorkommen für. Stattdessen müssten Sie eine Schleife haben.

var pos = 0; 
    while (pos < val.length) { 
     var start = val.indexOf('{', pos); 
     if ((start >= 0) && ((start + 7) < val.length)) { 
      if (val.charAt(start + 7) == '}') { 
       var color = val.slice(start + 1, start + 7); 
       var replacement = '<span style="color: #' + color + '">'; 
       val = val.slice(0, start) + replacement + val.slice(start + 8); 
       pos = start + replacement.length; 
      } else { 
       pos = start + 1; 
      } 
     } else { 
      pos = val.length; 
     } 
    } 

jsfiddle