• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JS ベタ打ち原稿を成型して出力するには?)

JSベタ打ち原稿を成型して出力する方法

このQ&Aのポイント
  • 未編集の洋楽プレイリストを指定の書式で成型する方法についての質問です。
  • 成型後の書式は、「2桁の連番_歌手名_-_曲名_(分:秒) or (西暦年) [_:半角空白]」です。
  • 歌手名や曲名に特定の記号が含まれる場合も考慮すべきです。

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (770/5733)
回答No.3

ベタ打ち原稿がほぼ成型後の書式で書かれているので、成型と言うほどのことはしていませんが、このような方法はどうでしょうか。 見る限り、各曲の区切れ目は、連番2桁 - でよさそうな気がします。 連番2桁と - を見つけて、曲分割のための改行を連番の前に入れます。 それを配列にするために改行で分割します。 ベタ打ち原稿と成型後の書式の違いは、連番2桁のあとの - のみのようなので、それを省きます。 あとは配列を改行区切りでつないでresultに入れます。 なお、ベタ打ち原稿が100曲をこえる(連番3桁以上)ことは想定していません。 var genkou = document.getElementById("genkou").value; const regex = /[0-9]{2} - /g; genkou = genkou.replaceAll(regex, '\n$&'); var lines = genkou.split("\n"); lines.shift(); for (var i = 0; i < lines.length; i++) { lines[i] = lines[i].substring(0, 3) + lines[i].substring(5).trim(); } document.getElementById("result").value = lines.join("\n"); 回答No.2さまの回答は楽しみなので待ってます。

retorofan
質問者

お礼

ご回答ありがとうございます。

retorofan
質問者

補足

dell_OKさん 完璧でした!

その他の回答 (3)

回答No.5

>回答No.2さまの回答は楽しみなので待ってます。 煽らないで~(笑)あはは もう、何も使わずベタ関数だけで、やっちゃいました^^ (ちなみ、nextのposを先に配列化したほうが効率はいいんだけどね) php 風の、strpos,substrで仕上げてみましたよ。

回答No.4

<script> function pos(target,check) { /* 文字として結合 */ let checkN="0"+check; /* 後方から2文字 */ let checkV=checkN.substr(-2,2); /* 先頭位置返却 */ return target.indexOf(checkV+" "); } let target=document.getElementById('genkou').innerHTML; let to=document.getElementById('result').innerHTML; let track; let p1,p2; let out=""; /* 1オリジン */ for (track=1;track<100;track++) { p1=pos(target,track); p2=pos(target,track+1); if (p1==-1) { break; } if (p2==-1) { /* 残り全部 */ out+=target.substr(p1)+"\n"; }else{ out+=target.substr(p1,p2-p1)+"\n"; } } /* 元々の、インナーにすでに\nがあるので、最後の全部で空改行になるが、一応はOKじゃない? */ document.getElementById('result').innerHTML=out; </script> #元質問の、HTMLの後ろにくっつけてテストしてみました。 <button id="btn">実行ボタン</button>で反応させてませんが^^ アルゴリズムとして"nn "(2桁の数字の直後がスペース)を探してるだけです。 で、見つからない場合、最後の数字から「残り全部出力」 それ以外は、「次に見つかる位置までを出力」 超~~~いい加減に書いてみましたが。 あり?なし?

retorofan
質問者

お礼

ご回答ありがとうございます。

retorofan
質問者

補足

AsarKingChangさん (テキストエリアの値は value で取得する) //修正後 let target=document.getElementById('genkou').value; let to=document.getElementById('result').value; /* //修正前 let target=document.getElementById('genkou').innerHTML; let to=document.getElementById('result').innerHTML; */

回答No.2

後でやるね。割といい案、思いついた。

retorofan
質問者

お礼

ご回答ありがとうございます。

retorofan
質問者

補足

ぜひとも、・・・。 期待しております!

関連するQ&A

専門家に質問してみよう