javascript で関数の行を取得する
const fs = require('fs'); // ファイルパスをコマンドライン引数から取得 //const filePath = process.argv[2]; const filePath = 'input.js'; if (!filePath) { console.error('ファイルパスが指定されていません。'); process.exit(1); } // ファイル読み込み fs.readFile(filePath, 'utf-8', (err, data) => { if (err) { console.error('ファイルの読み込み中にエラーが発生しました。', err); process.exit(1); } // 関数の正規表現 const functionRegex = /function\s+(\w+)\s*\([^)]*\)\s*{[^}]*}/g; // マッチした結果をCSV形式で出力 let match; let foundFunctions = false; while ((match = functionRegex.exec(data)) !== null) { foundFunctions = true; console.log(`${filePath}, ${match[1]}, ${getLineNumber(data, match.index)}, ${getLineNumber(data, match.index + match[0].length)}`); } if (!foundFunctions) { console.log(`${filePath}, (global), 1, ${getLineNumber(data, data.length)}`); } }); // 行番号を取得するヘルパー関数 function getLineNumber(text, index) { return text.substring(0, index).split('\n').length; }
for each => for
const fs = require('fs'); // ファイルパスをコマンドライン引数から取得 //const filePath = process.argv[2]; const filePath = 'input.js'; if (!filePath) { console.error('ファイルパスが指定されていません。'); process.exit(1); } // ファイル読み込み fs.readFile(filePath, 'utf-8', (err, data) => { if (err) { console.error('ファイルの読み込み中にエラーが発生しました。', err); process.exit(1); } // for each の正規表現 // const forEachRegex = /for each\s*\(\s*var\s+(\$\$\d+)\s+in\s+(\$\$\d+)\s*\)\s*\{/g; const forEachRegex = /for each\s*\(\s*var\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s+in\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\)(\s*)\{/g; // マッチした結果をES5形式に変換c const transformedCode = data.replace(forEachRegex, function (match, $$1, $$2, $$3) { const replacement = `for (var ${$$2}_key_ in ${$$2})${$$3}\{\nvar ${$$1} = ${$$2}[${$$2}_key_];`; return replacement; }); // 変換結果を出力 console.log(transformedCode); });