Posted at

Regexの結果から、行番号を計算する


やりたいこと


  • 正規表現でマッチした場所の行番号が知りたい


やり方

下記のようにすればおk。execは、マッチ箇所を全て舐め終わるとnullを返すので便利です。

function getLine(fileContent, matchIndex) {

let indexCount = 0;
let lineNumber = 0;
const lines = fileContent.split('¥n');
for (const line of lines) {
lineNumber++;
indexCount += line.length + 1; // 改行コード分
if (matchIndex < indexCount) { // マッチした場所が見つかった
break;
}
}
return lineNumber;
}

const fileContent = ...;
const reg = /.../g;

const matchData = reg.exec(reg);
const lineNumber = getLine(fileContent, matchData.index);