1

Maybe I have missed something, but what are wrong with this regular expresion?

var str = "lorem ipsum 12345 dolor";
var x = /\d+/.exec(str);
var y = /\d*/.exec(str);
console.log(x); // will print 12345
console.log(y); // will print "" but why ? 

Can you please explain why /\d*/.exec(str); returns an empty string instead of "12345". * means zero or more number of matches.

4

2 に答える 2

7

\d*行内の 0 個以上の数字に一致します。正規表現で実行するexecと、入力の先頭から開始され、指定されたパターンで最初に見つかったインスタンスが返されます。

では、その文字列の最初のインスタンスはどこにあるの\d*でしょうか? それは、文字列内で0 個以上の数字が続く最初の位置です。しかし、それらはすべて、その後に 0 個以上の数字が続きます! そこに数字があるか、ないかのどちらかですが、いずれにしても一致します。したがって、 の最初のインスタンスは\d*、文字列の最初の位置から始まる単純な長さ 0 の部分文字列です。

于 2011-07-28T20:31:42.190 に答える
1

*0 個以上に一致します。たぶん私は間違っているかもしれませんが、これは「lorem」で始まるゼロ桁に一致しないので、空の文字列ですか?

于 2011-07-28T20:23:12.630 に答える