スプレッドシート(Excelや、Googleスプレッドシート)で範囲をコピーし、他のアプリで貼り付ける際に、貼り付け先によってはTSV(Tab-Separated Values)の形式で貼り付けられます。
TSVでは、タブ文字は1つ右のセルへの遷移、改行文字は1行下への遷移を意味します。セル内にタブ文字や改行文字を含む場合は、セルの文字列を「"」(ダブルクォーテーションマーク)で挟みます。セル内にタブ文字と「"」、または改行文字と「"」を同時に含む場合は、文字列内の「"」は「""」に置換されます。
今回、TSVをJavaScriptで配列にパースするコードが見つからなかったので、自作してみました。
const TSV={}
TSV.parse=function(tsv){
const result=[[``]]
let row=0
let column=0
const regExp=/^\t|^\n|^"([^"]|"")*"|^[^\t\n]*/g
while(tsv){
switch(tsv[0]){
case`\t`:
result[row][++column]=``
break
case`\n`:
column=0
result[++row]=[``]
break
case`"`:
let[extracted1]=tsv.match(regExp)
extracted1=extracted1.replace(/^"|"$/g,``)
extracted1=extracted1.replaceAll(`""`,`"`)
result[row][column]=extracted1
break
default:
let[extracted2]=tsv.match(regExp)
result[row][column]=extracted2
}
tsv=tsv.replace(regExp,``)
}
return result
}