コミュニティ

【JavaScript】文字列を任意の文字数で分割し、配列を作成する方法

この記事は最終更新日から1年以上が経過しています。

はじめに

JavaScriptで文字列を任意の文字数で分割し、配列を作成する方法です。
結論からいうと正規表現での取得が一番スッキリ書けました。
他にもいくつか試したの方法も記載しておきます。

例ではUGGUGUUAUUAAUGGUUUの文字列を三文字毎に分割して["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]の配列を作成しています。

正規表現

const rna = "UGGUGUUAUUAAUGGUUU";
let cdn1 = rna.match(/.{3}/g);
console.log(cdn1)
// ["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]

substr

const rna = "UGGUGUUAUUAAUGGUUU";
let cdn2 = [];
for (let i = 0; i < rna.length / 3; i++) {
    cdn2.push(rna.substr(i * 3, 3));
}
console.log(cdn2)
// ["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]

substring

const rna = "UGGUGUUAUUAAUGGUUU";
let cdn3 = [];
for (let i = 0; i < rna.length; i += 3) {
    cdn3.push(rna.substring(i, i + 3));
}
console.log(cdn3);
// ["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]

slice

const rna = "UGGUGUUAUUAAUGGUUU";
let cdn4 = [];
for (let i = 0; i < rna.length; i+=3) {
    cdn4.push(rna.slice(i, i+3));
}
console.log(cdn4);
// ["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]

reduce

@hayashi-ay さんより教えて頂いたものです。

const rna = [..."UGGUGUUAUUAAUGGUUU"];
let cdn5 = rna.reduce( (acc, c, i ) =>  i % 3 ? acc : [...acc, rna.slice( i, i+3 ).join('') ], [] );
console.log(cdn5);

参考URL

JavaScriptで、文字列を、指定した文字数で分割して、配列で返す

turmericN
中小SIer(2年7ヶ月) → Web系ベンチャー(10ヶ月) → フリーランスエンジニア(2018/10〜) 最近はVue、Node.js、Laravel、AWSを触っています。
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
この記事は以下の記事からリンクされています
コメント

Array.prototype.reduce()を使った方法を思いつきました。
まあでも正規表現のやつが1番良さそうですね。

const rna = [..."UGGUGUUAUUAAUGGUUU"];
let cdn5 = rna.reduce( (acc, c, i ) =>  i % 3 ? acc : [...acc, rna.slice( i, i+3 ).join('') ], [] );
console.log(cdn5);

@hayashi-ay
ありがとうございます。
なるほど、reduceでのやり方はおもしろいです!!

こちらの記事内容、ちょうど知りたかった内容で助かりました。
正規表現なのですが、例えば19文字の場合など割り切れない時に19文字目を配列に入れるor省くなど選べるので下記のように直前の文字の最小桁数の指定を書いておいたほうが丁寧で良いかもと思いました。

let cdn1 = rna.match(/.{1,3}/g);
あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした