2017-06-05 22 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

相关问题