2017-06-05 2 views
0

Nehmen wir an, ich habe die folgende Zeichenfolge.Eine Reihe von Zeichen zusammenführen, wenn die nächste Reihe von Zeichen denselben Satz hat?

&eThe quick brown fox &djumps over the &dlazy &adog. 

Jeder Satz von Farbcodes &letter, beispiels &e die Farbe des folgenden Textes ändern, bis ein anderer Farbcode angezeigt. Es ist überflüssig, zwei gleiche Codes hintereinander zu haben, weil beide die gleiche Farbe haben.

&djumps over the &dlazy 

Ich versuche, alle doppelten Farbcode zu verschmelzen, die den Farbcode, bevor es übereinstimmt, so dass die obige Zeichenfolge würde in den folgenden ändern:

&eThe quick brown fox &djumps over the lazy &adog. 

aber ich bin nicht sicher, wie diese erledigt. Kann jemand helfen?

+0

, ob dies eine individuelle Sache ist, und ist eine schlechte Wahl für den Einsatz mit HTML (ist & Auslassungs ein Auslassungszeichen oder ein rotes llipsis) –

+0

@ Alex K., Das ist, warum es muss sei ein Fluchtmechanismus (z. B. '&&' könnte bedeuten '&'), aber keine wurde angegeben :( – ikegami

+0

Sorry, aber dies ist ein Web Addon, das ein Teil eines Spiels ist, in dem die Spieler ihre Farben je nach Farbcode ändern können Escape-Mechanismus Spiel ist Minecraft – kinx

Antwort

1

Verwendung String.replace in Kombination mit Rückruf und einer äußeren variablen die vorherige Farbe zu speichern:

let str = '&eThe quick brown fox &djumps over the &dlazy &adog.'; 
 

 
let last = ''; 
 
let result = str.replace(/&([a-z])/g, (match, color) => 
 
    color !== last ? (last = color, match) : '' 
 
); 
 

 
console.log(result); // &eThe quick brown fox &djumps over the lazy &adog.

0

Ihre Markup-Sprache benötigt einen Mechanismus für die Situationen, in denen der Text ein & gefolgt von einem Buchstaben enthält (z D&D, <). Die genaue Lösung hängt von Ihrem Fluchtmechanismus ab. Ich habe Code zur Verfügung gestellt, der funktioniert, wenn Ihre Markup-Sprache keinen Escape-Mechanismus hat (BAD!), Und ich habe auch Code zur Verfügung gestellt, der funktioniert, wenn der Escape-Mechanismus Ihrer Markup-Sprache aus dem & (dem offensichtlichsten Mechanismus) besteht.


// If you don't have an escape mechanism. 
 

 
let text = '&eThe quick brown fox &djumps over the &dlazy &adog.'; 
 

 
let prev; 
 
let result = text.replace(
 
    /&([a-zA-Z])/g, 
 
    match => match === prev ? '' : (prev = match), 
 
); 
 

 
console.log(result);

oder

// If && is an escaped &, and escaping is optional where unambiguous. 
 

 
let text = '&eThe quick brown fox &djumps over the &dlazy &adog.'; 
 

 
let prev; 
 
let result = text.replace(
 
    /&(.)/g, 
 
    function (match) { 
 
     return match.replace(
 
     /^&([a-zA-Z])/, 
 
     match => match === prev ? '' : (prev = match), 
 
    ); 
 
    }, 
 
); 
 

 
console.log(result);

+0

Die Frage ist (jetzt) ​​tagged javascript/jQuery – cmbuckley

+0

@cmbuckley, Ups! – ikegami

Verwandte Themen