如果下一行字符具有相同的集合,则合并一组字符?

时间:2017-06-05 18:00:08

标签: javascript jquery regex

假设我有以下字符串。

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

每组颜色代码&letter,例如&e将更改以下文字的颜色,直到出现另一个颜色代码。让两个相同的代码跟在一起是多余的,因为它们都是相同的颜色。

&djumps over the &dlazy

我正在尝试合并任何与之前的颜色代码匹配的重复颜色代码,因此上面的字符串将更改为以下内容:

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

但是我不确定这是怎么做的。有人可以帮忙吗?

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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);