選択範囲の数字をゼロ詰めして桁を合わせるサクラエディタのマクロ

本日3つ目。

padzero.js

(function(){
    String.prototype.repeat = function(count){
        var result = '';
        for(var i = 0; i < count; i++){
            result += this;
        }
        return result;
    };
    String.prototype.padLeft = function(length, char){
        return char.repeat(length - this.length) + this;
    };
    
    if(Editor.IsTextSelected() == 0) Editor.SelectAll();
    
    var selection = Editor.GetSelectedString(0);
    var matches = selection.match(/\d+/g);
    var maxlength = 0;
    for(var i = 0; i < matches.length; i++){
        if(maxlength < matches[i].length) maxlength = matches[i].length;
    }
    
    var result = selection.replace(/\d+/g, function(m){
        return m.padLeft(maxlength, '0');
    });
    
    Editor.InsText(result);
})();

使い方

1
10
100

こういう状況でマクロを実行すると、

001
010
100

こうなる。つまり数字にゼロを詰めて桁数を合わせたわけだ。一番桁数の大きな数字に合うようになってる。

数字以外の文字が含まれててもいい。

abc1defg22hijkl33333mnop44qrs55tuvwxy6666z

これが

abc00001defg00022hijkl33333mnop00044qrs00055tuvwxy06666z

こうなる。あんまりこういう使い方は無いと思うけど。