javascript - 正則替換replace中$1的用法

來源:互聯網
上載者:User
preg_replace("/([&?]uid=)[^?&]*/",'$1173','http://localhost/mobile/index.php?c=wish&uid=181')//輸出:http://localhost/mobile/index.php?c=wish73

如上面$replacement ($1173)表示的,php以為我要把$11加上73,但其實我是想讓 $1加上173,請問怎樣改才能符合我的預期?

剛剛在寫問題的時候突然想到把$replacement改成$01說不定可以,沒想到真可以了,現在是這樣'$01173'

另外,同樣的$replacement($1173)放到js裡表現的結果卻是我預期的,那js裡想要$11加上73怎麼辦?

回複內容:

preg_replace("/([&?]uid=)[^?&]*/",'$1173','http://localhost/mobile/index.php?c=wish&uid=181')//輸出:http://localhost/mobile/index.php?c=wish73

如上面$replacement ($1173)表示的,php以為我要把$11加上73,但其實我是想讓 $1加上173,請問怎樣改才能符合我的預期?

剛剛在寫問題的時候突然想到把$replacement改成$01說不定可以,沒想到真可以了,現在是這樣'$01173'

另外,同樣的$replacement($1173)放到js裡表現的結果卻是我預期的,那js裡想要$11加上73怎麼辦?

試試$01173

JS只是比較智能一點,它發現你的正則裡面沒有11個分組,所以會把$1173拆分為$1173兩個部分。但是當分組數量達到11個以上時它也就會以能夠匹配到的最大的分組來替換了,比如:

'abcdefffgg'.replace(/(f+)fgg/, '$1173'); // abcdeff173,(替換的是第1個分組,ff)'abcdefffgg'.replace(    /(f+)(a?)(a?)(a?)(a?)(a?)(a?)(a?)(a?)(a?)(fgg)/,    '$1173'); // abcdefgg73(替換的是第11個分組,fgg)

要想在上面的第二個例子裡替換第一個分組,可以用$01173,由於分組最大隻能到99,而01已經滿了2位元,所以JS不會再去嘗試檢查第三位元。你可以在PHP裡試試這種方法,我沒測試,不知道可不可行。

至於你說的,想讓JS在不足11個分組的時候匹配$11應該是做不到的。

在replace第二個參數裡面$實際上是告訴Regex引擎,接下來的是一個反向引用(有的語言或工具裡面也用\標識),是對Regex中匹配出來的組的引用,在你的例子裡面就是 ([&?]uid=)所匹配出來的內容。

我對PHP不是很熟。
回答你的javascript的問題,在js裡面$1代表的第一個被匹配到的group。所以結果是正確。

如果你想要$11這個字串的加上73的話,用這個就可以了$$1173

詳細說明可參照這裡:http://deerchao.net/tutorials/regex/regex.htm#backreference

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.