私はGOTOs/GOSUBs行番号をBASICコードから抽出しようとしています。私はNodeJSを使ってマッチを管理しようとしています(JS風のRegexです)。Regexを使ってGOTO/GOSUBの行番号を抽出する
私はregex101.comを使用してテストをやっている(ここではhttps://regex101.com/r/SaZuue/2を参照)、私は私が望むものにかなり近いよ:
- エキス
GOTO ###
GOSUB ###
エキス ["GOSUB", " ", "###"]
として抽出["GOTO", " ", "###"]
などをIF (cond) THEN ###
として["THEN", " ", "###"]
ON ERR GOTO #, ##, ###
として["GOTO", " ", "#", ", ", "##", ", ", "###"]
、
- 取引以外は上記と同じ
- 。すべてのマッチンググループは返し
ON ERR GOTO
を除きOKです100 ON ERR GOTO 10000, 30, 200, 10,800: GOSUB 20: IF A THEN 10: GOTO30: GOTO 50
:上
/(GOTO|GOSUB|THEN)(\s*)(\d+)(?:(\s*,\s*)(\d+))*/ig
テスト:
GOSUB
、
THEN
と
,
間のスペースはオプションであるか、または複数とすることができ、すべての場合に示されるスペースの正確な数を返すという事実と
ON ERR GOSUB
は、これまでのところ私は、次の正規表現が出ています最初と最後の数字のみ(10000 & 800)で、他の数字は含まれません。
私には何が欠けていますか?ありがとう:)
JSの正規表現は、最後の値だけが保持され、繰り返しのキャプチャをサポートしていません。だから、最良のアプローチは[すべての数字を取り込む](https://regex101.com/r/dPDLqD/1)で、グループ4を '/ \ s *、\ s * /' regex(必要に応じて空の値を除外します)。純粋な正規表現の解決法はここでは不可能です。 –
Argh!やみつめ!とにかくありがとう ! – fvlinden
BASICのいくつかのフレーバは変数に行番号を入れることができます: 'A $ = 10:GOTO A $' –