正規表現の*
、またはクリーネ閉包は「ゼロ以上」を意味するため、空の文字列と一致します。
+
代わりに「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", ""]