- ベストアンサー
JSベタ打ち原稿を成型して出力する方法
- 未編集の洋楽プレイリストを指定の書式で成型する方法についての質問です。
- 成型後の書式は、「2桁の連番_歌手名_-_曲名_(分:秒) or (西暦年) [_:半角空白]」です。
- 歌手名や曲名に特定の記号が含まれる場合も考慮すべきです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ベタ打ち原稿がほぼ成型後の書式で書かれているので、成型と言うほどのことはしていませんが、このような方法はどうでしょうか。 見る限り、各曲の区切れ目は、連番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さまの回答は楽しみなので待ってます。
その他の回答 (3)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>回答No.2さまの回答は楽しみなので待ってます。 煽らないで~(笑)あはは もう、何も使わずベタ関数だけで、やっちゃいました^^ (ちなみ、nextのposを先に配列化したほうが効率はいいんだけどね) php 風の、strpos,substrで仕上げてみましたよ。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
<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桁の数字の直後がスペース)を探してるだけです。 で、見つからない場合、最後の数字から「残り全部出力」 それ以外は、「次に見つかる位置までを出力」 超~~~いい加減に書いてみましたが。 あり?なし?
お礼
ご回答ありがとうございます。
補足
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; */
- AsarKingChang
- ベストアンサー率46% (3467/7474)
後でやるね。割といい案、思いついた。
お礼
ご回答ありがとうございます。
補足
ぜひとも、・・・。 期待しております!
お礼
ご回答ありがとうございます。
補足
dell_OKさん 完璧でした!