DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

レイヤーに連番を振るスクリプト

あらまし

Illustratorのコミュニティで書いたスクリプトをGistにアップしていなかったので、ブログにも書いておく次第です。

詳しくはスレッドを参照いただきたいのですが、要するにレイヤーに連番を振りたいという内容でした。
内容的に、レイヤー順序を入れ替えたり、増えたり減ったりということが起きうると容易に想像できたので、振り直しも視野に入れて作ってあります。

トップ階層のレイヤーに連番を振る

コード

ざっくり解説

難しいスクリプトではないので、要所だけ。

lay[i].name = ("0" + (i + 1)).slice(-2) + "_" + deletePrefix(lay[i].name);

ちょっとわかりにくいかもしれませんが、("0" + (i + 1)).slice(-2)について、文字列型"0"に数値型(i + 1)の結果を加算することで、全体が文字列型になります*1。その文字列型のオブジェクトに対して、String.slice()メソッド*2で後ろから2桁だけ引っ張ってきます。
deletePrefix()関数は末尾で定義している通り、文字列の先頭にある2桁の数字とアンダーバーを削除して返すだけの関数です。これを利用して「振り直し」を表現しています。

if (/^[0-9]{2}_/.test(str)) { ... }

RegExp.test()メソッドは、その正規表現にマッチすればtrue、しなければfalseを返すメソッドです*3String.match()メソッドよりも扱いが単純なので、正規表現にマッチするかどうか知りたいときはこちらを使うことが多いです。

*1:加算:加算 (+) - JavaScript | MDNを参照

*2:String.slice()メソッド:String.prototype.slice() - JavaScript | MDNを参照。引数に負の数を指定することで、後ろからテキストを取り出すことができる

*3:RegExp.test()メソッド:RegExp.prototype.test() - JavaScript | MDNを参照