2017-06-05 24 views
0

比方說,我有以下字符串。如果下一行字符具有相同的集合,則合併一組字符?

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

每組顏色代碼&letter,e.g &e將直到出現另一顏色代碼改變下列文本的顏色。將兩個相同的代碼依次排列,因爲它們的顏色都是相同的,這是多餘的。

&djumps over the &dlazy 

我試圖合併的顏色代碼之前,它匹配任何重複的顏色代碼,所以上面的字符串會變成如下:

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

但是我不知道該怎麼已經完成了。誰能幫忙?

+0

,如果這是一個自定義的東西和是與HTML中使用一個糟糕的選擇(是和省略號省略號或紅色llipsis) –

+0

@Alex K.,這就是爲什麼有需要是一種逃避機制(例如'&&'可能意味着'&'),但沒有指定:( – ikegami

+0

對不起,但這是一個網頁插件,是一個遊戲的一部分,可以讓玩家根據顏色代碼改變他們的顏色。逃避機制遊戲是我的世界 – kinx

回答

1

結合使用String.replace與回調和外可變存儲上次的顏色:

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

您的標記語言需要一種機制,用於文本中包含&後跟一個字母(例如D&D<)的情況。確切的解決方案將取決於您的逃生機制。如果您的標記語言沒有轉義機制(BAD!),我提供了可用的代碼,並且如果您的標記語言的轉義機制包含了加倍&(最明顯的機制),我還提供了可用的代碼。


// 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);

// 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

問題是(現在)標記爲javascript/jQuery。 – cmbuckley

+0

@cmbuckley,糟糕!轉換。 – ikegami

相關問題