0

これらが返される理由null:

var str="Is this all abc bbb c is";
var patt1=/is(?=bbb)/;

var str="Is this all abc bbb c is";
var patt1=/is(?=bbb)/;

var str="Is this all there is";
var patt1=/is(?=all)/; // <------ (?=all) vs (? =all)

しかし、これは次を返しますis

var str="Is this all there is";
var patt1=/is(?= all)/;

?

4

2 に答える 2

4
(?=...)

正規表現の「先読み」機能であるため、正規表現の意味は次のとおりです。

/is(?=bbb)/ //look for isbbb and return is
/is(?=all)/ //look for isall and return is

どちらも文字列に存在しないため、一致するものはありません。

于 2012-10-20T20:54:13.193 に答える
1

正規表現を取りましょう/is(?=bbb)/式の先頭にある小さな注意点を想像してみてください(注意点とは、テキストカーソルがどこにあるかを示す、文字間の点滅する線です。これは、指している文字の後ろにあります)。

is(?=bbb)
^

i私たちはあなたのひもで小さなものを探します。単語の中に1つ見つかりますthis。カレットシフト:

is(?=bbb)
 ^

次の文字はs?確かにそうです。再びカレットシフト:

is(?=bbb)
  ^

今、何か面白いことが起こります。次に、次の文字がであるかどうかを確認しますb。しかし、それを見つけたとしても、私たちはカレットを進めません。

部分式bbbのみを一致させると、一致する括弧の後にカレットが文字に進みます(ただし、部分式と一致するテキストは一致する文字列に含まれません)。

id(?=bbb)
         ^

残念ながら、文字列のどこに。isが続いているのかはわかりませんbbb。それがあなたが得ている理由ですnull

于 2012-10-20T21:12:27.967 に答える