回答編集履歴

2

表現を修正

2021/03/17 03:34

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -10,12 +10,16 @@
10
10
 
11
11
 
12
12
 
13
- 偶数回目の`exec`では、**直前の検索でマッチした箇所の直後(今回だと39)に`lastIndex`が設定**されており(検索対象となる文字列がリスト次の要素になっていたとしても)`exec`はそのインデックス以降からマッチを試みる。今回データで検索対象とな文字列の長が統一さており、このマッチはかならず失敗すになる
13
+ 1回目の`exec`では、`lastIndex`の値0なので、検索対象となる文字列の先頭からマッチを試み、想定す部分にマッチするとき、`lastIndex`の値「次に検索を開始す位置」に設定される(今回だ39)
14
14
 
15
15
 
16
16
 
17
- すると、`lastIndex`の値は0に設定されるので、奇数回目の`exec`では、検索対象となる文字列の先頭からマッチを試み、想定す部分にマッチする。
17
+ 2回目の`exec`では、検索対象となる文字列がリスト次の要素に代わっていたとしても、`exec`は`lastIndex`以降からマッチを試みる。今回のデータでは検索対象とな文字列の長さが統一されており、インデックス39以降は文字がないため、このマッチはかならず失敗することになるすると、`lastIndex`の値は0に設定される。
18
18
 
19
19
 
20
20
 
21
+ というわけで、これ以降も「奇数回目の`exec`では、`lastIndex`が0なので想定される部分にマッチ」し、「偶数回目の`exec`では、`lastIndex`が39なのでマッチに失敗」する、という動作が繰り返される。
22
+
23
+
24
+
21
- 対処方法としては、`linkRegExp`に`g`フラグを付けない(ステートフル動作をさせない)こと。
25
+ 対処方法としては、言うまでもなく`linkRegExp`に`g`フラグを付けない(前回の状態を引き継ぐステートフル動作をさせない)こと。

1

補足を追加

2021/03/17 03:34

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- 偶数回目の`exec`では、**直前の検索でマッチした箇所の直後(今回だと39)に`lastIndex`が設定**されており、`exec`はそのインデックス以降からマッチを試みる。今回のデータでは、検索対象となる文字列の長さが統一されており、このマッチはかならず失敗することになる。
13
+ 偶数回目の`exec`では、**直前の検索でマッチした箇所の直後(今回だと39)に`lastIndex`が設定**されており、(検索対象となる文字列がリストの次の要素になっていたとしても)`exec`はそのインデックス以降からマッチを試みる。今回のデータでは、検索対象となる文字列の長さが統一されており、このマッチはかならず失敗することになる。
14
14
 
15
15
 
16
16