2

この議論を読んで、私はこれが何を意味するのか理解していませんでした:

 $1X$2

単にX

そして、この他のコードについて:

 str = str.replace(/(<script.*?>)(.*)(?=<\/script>)/gi, function(x,y,z)
 {return y+z.replace(/a/gi,'Z')})

これが私が理解していなかったことです:

  • ?=
  • どのように機能しfunction(x,y,z)ますか?つまり、どこからxyそしてz

誰かがこのコードを明確に説明できれば、私は非常に感謝します。

4

3 に答える 3

4
  1. 呼び出しの2番目の引数として使用される文字列"$1X $ 2"には、正規表現の最初の引数からのグループ.replace()への参照が含まれています。グループ(括弧内の正規表現の一部)は、後で使用するために一致する文字を収集します。サブストリング「$1」および「$2」は、「グループ1(またはグループ2)によって一致したものは何でも」を意味します。

  2. 呼び出しの2番目の引数が.replace()関数の場合、JavaScriptは一致情報を引数として関数に渡します。最初の引数は常に一致全体です。後続の引数は一致したグループです。

したがって:

alert("hello world".replace(/(ell)(o w)/, "$2$1");
// alerts "ho wellorld"
于 2012-10-24T15:04:51.587 に答える
4

これはすべて、グループのキャプチャに関するものです。(間にあるすべてのものを)キャプチャして、後で一致のサブストリングにアクセスできるようにします。

$1最初にキャプチャされたグループ、2番目のグループを指します$2(つまり、それぞれ1番目と2番目の括弧のペア)。($0試合全体を指します。)

コールバック関数を持つバリアントは同じことを行いますが、ここでは変数、、xおよびyzキャプチャされたグループ(それぞれに対応する)で埋められ$0ます。$1$2

最後?=に先読みを開きます。これは<\/script>、一致した文字列の正規表現エンジンを実際に進めることなく、またこの部分を一致に含めずに、一致のこの位置が続くことを示しています。

于 2012-10-24T15:04:55.780 に答える
4

$1と$2は、キャプチャされた部分式(括弧で区切られている())を、への前の引数の正規表現から参照しています.replace()

?=は前向きな先読みです。http://www.regular-expressions.info/lookaround.html

これfunction(x, y, z)は、$1と$2を参照するのと同様のことを行う無名関数式ですが、代わりにそれらを変数に格納します。

于 2012-10-24T15:05:13.100 に答える