もし >>683のコードを元に高速化するなら

1、 Length(S) は const S でも関数に展開される
   だから一旦変数に代入して while ループ内の Length(S) を置換する方がいい

2、文字列への Moji[ i ]:= の代入は関数に置換されてしまう
  高速化するなら文字列ではなく文字配列かポインタにするといい
  ポインタの例は既にあるので、文字配列にする場合の例

type sarray=array[1..$10] of char; //気持ち悪いけどHighは無視されるからOK
var pD:^sarray; と文字配列のポインタと宣言

pD:=@Result[1]; として ループ中の result[wp] を pD^[ wp ] に置換

3、ループ内の for i:=1 to Length(repstr) do Result[wp+i-1]:=repstr[i]; は勿体ない
    var repstr:array[0..1]of char; と文字配列にして
Result[wp ]:=repstr[0];
Result[wp+1]:=repstr[1];
inc(wp,repstrLen);
   とする。 repstrLen=1の時は無駄なコピーだけど、比較して禁止するにもコードが必要