正規表現の*、またはクリーネ閉包は「ゼロ以上」を意味するため、空の文字列と一致します。
+代わりに「1つ以上」を意味するため、空の文字列とは一致しません。
私たちが次のように持っているとすると
a = 'bb bbbb bbb';
このように表現しましょう:
a = /^bb bbbb bbb$/;
ここで、^は文字列の始まりであり、は文字列$の終わりです。
私たちのパターンは(bb)*です。これは、エンジンが2つのb「0回以上」のシーケンスを検索することを意味します。これはbb、シーケンスが見つかった場合はパターンが一致し、そうでない場合は空の文字列が一致することを意味します。
ここで、ステップバイステップで、ドット(.)を使用して正規表現分析を表します。
手順
STRING MATCH ARRAY
start - /^.bb bbbb bbb$/ -> [ ]
1 - /^bb. bbbb bbb$/ -> [ "bb" ]
2 - /^bb .bbbb bbb$/ -> [ "bb", "" ]
3 - /^bb bbbb. bbb$/ -> [ "bb", "", "bbbb" ]
4 - /^bb bbbb .bbb$/ -> [ "bb", "", "bbbb", "", ]
5 - /^bb bbbb bb.b$/ -> [ "bb", "", "bbbb", "", "bb" ]
6 - /^bb bbbb bbb.$/ -> [ "bb", "", "bbbb", "", "bb", "", ]
7 - /^bb bbbb bbb$./ -> [ "bb", "", "bbbb", "", "bb", "", "" ]
パターンが1つのシーケンスに一致したため、STEP 1プッシュしました。bb
パターンが空の文字列と一致したため、STEP 2プッシュしました。""
パターンが2つのシーケンスに一致したため、STEP 3プッシュしました。bbbb
STEP 4->STEP 2
STEP 5->STEP 1
それ以来、パターンが空の文字列と一致したため、STEP 6プッシュしました。1つだけが見つかりました。""b
最後に$トークンに遭遇し、それは再び空の文字列と一致します。
文字列が"bb bbbb bbbb"配列だった場合は["bb", "", "bbbb", "", "bbbb", ""]