35866


こんにちは。  
JavaScriptで、シンプルな自分用のライブラリを作っています。  
コンパイル系の言語はよく使えるのですが、JavaScriptはまだ経験が浅いです。

改行で区切られた文字列に関する処理を行いたいと思っています。  
(名前が適切かどうかはともかくとしまして)

[code]

    var doc = new Document(改行含む文字列);
    
[/code]

このような記述で、インスタンスを作り、行ごとにアクセスできるようなものを作りたいのです。`doc.getLine(i)`とか、`doc.setLine(i)`とか。

このときに、`¥r`、`¥n`、`¥r¥n`の全ての改行コードに対応したいなと思っています。  
`¥r¥n`は1行の空行、`¥n¥r`は2行の空行として扱いたいです。

例えば、ですが文字列が、次のようなものの場合

[code]

    '0123¥r456¥n789¥r¥n0123¥r¥r456¥n¥n789¥r¥n¥r¥n0123¥n¥r¥n¥r456'
    
[/code]

配列に

[code]

    0123¥r
    456¥n
    789¥r¥n
    0123¥r
    ¥r
    456¥n
    ¥n
    789¥r¥n
    ¥r¥n
    0123¥n
    ¥r¥n
    ¥r
    456
    
[/code]

このような形で分解したいのです。  
※少し分解例を間違えていたので修正しました。  
単に
`¥r`、`¥n`、`¥r¥n`、混在のテキストファイルに対しても読み込めるように処理をしたいと思ってます。`¥r`のテキストなんて実際にはほぼ存在しないとは思っています。  
また、'¥r¥n'を`¥n`、`¥r`を`¥n`にしてしまえば、全部¥nにして扱いやすそうですが、そのライブラリを使って何らかの加工をして戻す場合に、改行コードが勝手に変えられるのはライブラリの性質としてはちょっと残念だな、と思ってまして、どうせなら、改行コードが不一致しててもそのまま返してあげたいなと、そんな思いです。(ちょっと固執すぎかもしれません)

単純な`split`ではうまくいかないのは当たり前のことなのですが  
何か、シンプルで簡単な解決策などありますでしょうか。  
すでにどこかにこのようなコードはあるような気がしますが  
改行でSplitとかで検索しても  
たんに`¥n`でsplitする初心者向けの解決策がみつかるだけなので、検索でみつけることもできません。

文字列で先頭からサーチしていって`Array`に`push`かなにかをするのがいいのかな、と思っているのですが  
JavaScriptは文字列処理自体が遅いので、そのような処理が適切(スピードやシンプルさ)なのかが、わからなく、自信がもてないところではあります。

もっとよい解決策はあるのかな、もしかして正規表現の応用とかで高速に処理できるのかな、と思ってお聞きします。

何か、知見をお持ちの方に、例えば、すでにどこそこライブラリの実装があるよとか、書いたことあるから貼り付けるよとか、そういう情報を教えていただけますと助かります。  
よろしくおねがいします。


CC BY-SA 3.0
2017-06-25T02:33:06.780
35865
2017-06-25T14:42:51.657
2017-06-25T03:54:27.167
21047
21047
question
javascript
改行コード、¥r¥nや¥nに対応したsplit方法


正規表現としては`/[^\r\n]*(\r\n|\r|\n|$)/g`でしょうか。

[code]

    var input = '0123\r456\n789\r\n0123\r\r456\n\n789\r\n\r\n0123\n\r\n\r456';
    input.match(/[^\r\n]*(\r\n|\r|\n|$)/g);
    
[/code]

で記載の配列が得られます。

なお、質問文に書かれている`¥`（円記号）は`\`（バックスラッシュ）とは異なるので気をつけください。


CC BY-SA 3.0
2017-06-25T03:58:38.797
35866
2017-06-25T14:42:51.657
2017-06-25T14:42:51.657
4236
4236
35865
answer