背景
ES6で正規表現において拡張されたものとしてマッチした位置の保持があると聞き、
その動作を確認するためのをサンプルコードです
サンプルコードの概要
正規表現のパターンと、マッチしたときの処理関数をプロパティーに持つオブジェクトを
いくつかを配列にして、検証対象文字列を配列の順でマッチをチェックしていく関数です。
マッチした時、保持しているはずのlastindexプロパティーを出力し確認するようにしています
ところが以下のコードの出力は、5,6,11,12,18になります。
わからない点は6と12が出てきてしまう点です。
これら数字の示す位置はパターンにない1コの空白なのにどうして出力されてしまうのでしょうか?
空白といえばここでは、/\s*/yの部分とおもうのですが・・・コードからして関係なさそうですし。
自分の理解が実際の処理のロジックと何がかけ離れてるのか教えてほしいです
JavaScrip
1var parser = (input, match) => { 2 for (var pos = 0, lastPos = input.length; pos < lastPos;) { 3 for (var i = 0; i < match.length; i++) { 4 match[i].pattern.lastIndex = pos 5 var found 6 if ((found = match[i].pattern.exec(input)) !== null) { 7 match[i].action(found) 8 pos = match[i].pattern.lastIndex 9 console.log(pos) 10 break 11 } 12 } 13 } 14} 15 16var report = (match) => { 17 // console.log(JSON.stringify(match)) 18} 19 20parser("Foo 1 Bar 7 Baz 42", [{ 21 pattern: /Foo\s+(\d+)/y, 22 action: (match) => report(match) 23}, { 24 pattern: /Bar\s+(\d+)/y, 25 action: (match) => report(match) 26}, { 27 pattern: /Baz\s+(\d+)/y, 28 action: (match) => report(match) 29}, { 30 pattern: /\s*/y, 31 action: (match) => {} 32}])
実行環境
VS CODE ver 1.28.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/17 13:36 編集