3 回答

TA貢獻1780條經驗 獲得超5個贊
您可以將函數傳遞給replace。
var r = a.replace(/(f)/, function(v) { return v.toUpperCase(); });
說明
a.replace( /(f)/, "$1".toUpperCase())
在此示例中,您將字符串傳遞給replace函數。由于您使用的是特殊的替換語法($ N捕獲第N個捕獲),因此您只是賦予了相同的值。toUpperCase實際上,這是騙人的,因為您僅使替換字符串大寫(這是沒有意義的,因為$和1字符沒有大寫,因此返回值仍然是"$1")。
a.replace( /(f)/, String.prototype.toUpperCase.apply("$1"))
信不信由你,這個表達的語義是完全一樣的。

TA貢獻1831條經驗 獲得超9個贊
舊帖子,但值得為其他使用例使用受限的RegEx擴展@ChaosPandion答案。例如,請確保(f)捕獲組周圍有特定格式/z(f)oo/:
> a="foobazfoobar"
'foobazfoobar'
> a.replace(/z(f)oo/, function($0,$1) {return $0.replace($1, $1.toUpperCase());})
'foobazFoobar'
// Improve the RegEx so `(f)` will only get replaced when it begins with a dot or new line, etc.
我只想強調兩個參數,即function找到特定格式和替換格式中的捕獲組成為可能。
添加回答
舉報