次の正規表現があります。
var regEx = /^\W*(.*?)\W*$/;
var regEx2 = /^\W*(.*)\W*$/;
(.*?)実際にはどういう意味ですか?(.*?)との違いは何(.*)ですか?- なぜJavascriptで
regEx.exec("abc ")戻るのですか?['abc ', 'abc'] - なぜJavascriptで
regEx2.exec("abc ")戻るのですか?['abc ', 'abc ']
次の正規表現があります。
var regEx = /^\W*(.*?)\W*$/;
var regEx2 = /^\W*(.*)\W*$/;
(.*?)実際にはどういう意味ですか?(.*?)との違いは何(.*)ですか?regEx.exec("abc ")戻るのですか?['abc ', 'abc']regEx2.exec("abc ")戻るのですか?['abc ', 'abc ']?数量詞、、などの後に*追加+すると{n,m}、デフォルトの欲張りマッチングとは対照的に、気が進まない/怠惰なマッチングになります。名前からするとかなり直感的です。貪欲とは、可能な限り多くの人と一致しようとすることを意味します。レイジーとは、可能な限り一致させようとすることを意味します。
単語以外の\Wトークンはないため、\W*空の文字列に一致します。次に、一致するもの(.*?)をできるだけ少なくしますが、\W*何かに一致するかどうかを確認します。したがって、(.*?)一致してキャプチャ "abc"し、\W*(単語以外の)スペースと一致します。
上記とほぼ同じですが、(.*)可能な限り消費し、一致してキャプチャし "abc "、一致\W*する空の文字列が残ります。
2と3の場合、戻り配列の2番目の要素は、正規表現の最初のキャプチャグループによってキャプチャされたテキストです。配列の最初の要素は、正規表現全体に一致するテキストです。
(。*?)は実際にはどういう意味ですか?
一致するグループ内で、任意の文字を0回以上非貪欲に一致させます。
regEx.exec( "abc")がJavascriptで['abc'、'abc']を返すのはなぜですか?
一致するグループごとに配列のメンバーを1つ取得します。インデックス0の要素は完全一致であり、次の要素は上記の最初の(そして唯一の)一致グループからのものです。
regEx2.exec( "abc")がJavascriptで['abc'、'abc']を返すのはなぜですか?
上記と同じ理由で、今回を除いて、貪欲な試合は最後のスペースにも一致するため、この場合、最初のキャプチャグループは完全な試合と同じになります。
さて、私が見つけた正規表現を見るときに最も簡単なことは、それらを分解して、各部分が何をしているのかを書き出すことです。
したがって、最初の正規表現を使用します/^\W*(.*?)\W*$/
^ Start of search string
\W* Match a non-word character zero or more times
( Start of group
.*? Match any character (except a line terminator) zero or more times but as few as possible
) End of group
\W* Match a non-word character zero or more times
$ End of search string
このexecメソッドはテキストを検索し、文字列の配列を返します(失敗した場合はnullを返します)。要素0の文字列は、式全体に一致するサブ文字列です。この後の文字列は、個々のキャプチャグループに対応する文字列です。
したがって、最初の例では、式全体がキャプチャされています"abc "が、(.*?)グループがキャプチャ"abc"されているため、配列に2つのアイテムが含まれています。