🦭

文字列を区切ると空文字が生成される

に公開
3

2025/07/28追記
コメントいただきありがとうございました
タイトルの件、どうしてなのか納得できたので、一部編集しました
コメントいただいた方法が一番簡潔だなあと思います...

const text = 'なんかのエラーです。もう一度懲りずにやり直してください。';
const sentence = text.split('。');
console.log(sentence);
// (3) ['なんかのエラーです', 'もう一度懲りずにやり直してください', '']

最後に空文字ができるの、なぜなのかよく分からず...
日本語が原因なのかと思いましたが、関係ないようです

const text = 'nankanoeradesu.mouichidokorizuniyarinaoshitekudasai.';
const sentence = text.split('.');
console.log(sentence);
// (3) ['nankanoeradesu', 'mouichidokorizuniyarinaoshitekudasai', '']
const text = 'There was some kind of error.Please try again.';
const sentence = text.split('.');
console.log(sentence);
// (3) ['There was some kind of error', ' Please try again', '']

結論

文字列を指定文字列で区切ると空文字が生成されるのは標準なので、
空文字いらないとなったら削除するほかなさそうでした

区切り文字に指定した文字が出てくるたびにsplit()の処理が走り
一番最後に区切り文字があった場合、その位置で
分割されて空文字ができるとのことでした
(コメントありがとうございました...!)

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/split

const text = 'なんかのエラーです。もう一度懲りずにやり直してください。';
const sentence = text.split('。').filter(x => x);
console.log(sentence);
// (2) ['なんかのエラーです', 'もう一度懲りずにやり直してください']

蛇足

区切り文字は削除されてしまうので区切り文字ごと欲しいとなったら
区切り文字専用で用意するか、再度区切り文字を設定するかなどなど工夫が必要です

// 専用区切り文字を用意
const text = 'なんかのエラーです。¥もう一度懲りずにやり直してください。';
const sentence = text.split('¥');
console.log(sentence);
// (2) ['なんかのエラーです。', 'もう一度懲りずにやり直してください。']

// 再度区切り文字を設定
const text = 'なんかのエラーです。もう一度懲りずにやり直してください。';
const sentence = text.split('。').filter(x => x).map((message) => { return `${message}` });
console.log(sentence);
// (2) ['なんかのエラーです。', 'もう一度懲りずにやり直してください。']

Discussion

696696

split('。')とするとが出てくるたびにsplit()の処理が走るので、一番最後のの位置でも分割されます。

// 空文字列が入る
const text = 'なんかのエラーです。もう一度懲りずにやり直してください。';
const sentence = text.split('。');
console.log(sentence);
// (3) ['なんかのエラーです', 'もう一度懲りずにやり直してください', '']

// 空文字列が入らない(最後の'。'を削除)
const text = 'なんかのエラーです。もう一度懲りずにやり直してください';
const sentence = text.split('。');
console.log(sentence);
// (2) ['なんかのエラーです', 'もう一度懲りずにやり直してください']

を入れるために区切り文字を他の文字にするなら、一箇所だけでOKです。

// ' ' で区切る
const text = 'なんかのエラーです。 もう一度懲りずにやり直してください。';
const sentence = text.split(' ');
console.log(sentence);
// (2) ['なんかのエラーです。', 'もう一度懲りずにやり直してください。']
shiracamusshiracamus

// 再度区切り文字を設定

正規表現を使う手もありそうです。

const text = 'なんかのエラーです。もう一度懲りずにやり直してください。';
const sentence = text.split(/(.*?)/).filter(x => x);
console.log(sentence)
// [ 'なんかのエラーです。', 'もう一度懲りずにやり直してください。' ]
ghaajghaaj

これがいちばん期待に沿っているのではないでしょうか?

const text = 'なんかのエラーです。もう一度懲りずにやり直してください。';
const sentence = text.split(/(?<=)/);
console.log(sentence);
// ["なんかのエラーです。", "もう一度懲りずにやり直してください。"]