私はアドレスの文字列を持っています:
let addr3 =
"123 Main Street St. Louisville OH 43071,432 Main Long Road St. Louisville OH 43071,786 High Street Pollocksville NY 56432,54 Holy Grail Street Niagara Town ZP 32908,3200 Main Rd. Bern AE 56210,1 Gordon St. Atlanta RE 13000,10 Pussy Cat Rd. Chicago EX 34342,10";
次のように、各アドレス行を照合するために、先読み機能と exec 関数 (これを行うにはさまざまな方法があることはわかっていますが、これらを使用する必要があります) で Regex を使用したいと考えています。
['123 Main Street St. Louisville OH 43071,432',
'Main Long Road St. Louisville OH 43071,786',
'High Street Pollocksville NY 56432,54', ... ]
次の正規表現をまとめました。
/(?:^|,\d+.|,\d+)(?=([^,]+,\d+))/;
この式は、Rubular で使用すると上記の各アドレス文字列と一致しますが、次の方法で VScode からこれを実行しようとすると、次のようになります。
let match;
const matches = [];
const pattern = /(?:^|,\d+.|,\d+)(?=([^,]+,\d+))/;
while ((match = pattern.exec(addr3))) {
matches.push(match[1]);
}
console.log(matches);
致命的なエラーが発生し、テキストがコンパイルされません:
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
この正規表現の組み合わせが Rubular で機能するのに、exec ループを実行しないのはなぜですか? また、正しく機能するようにコードを修正するにはどうすればよいでしょうか?