亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用Javascript中的大寫替換正則表達式捕獲組

用Javascript中的大寫替換正則表達式捕獲組

湖上湖 2019-11-18 10:56:28
我想知道如何用JavaScript中的大寫字母替換捕獲組。這是到目前為止我無法嘗試的簡化版本:> a="foobar"'foobar'> a.replace( /(f)/, "$1".toUpperCase() )'foobar'> a.replace( /(f)/, String.prototype.toUpperCase.apply("$1") )'foobar'您能解釋一下這段代碼有什么問題嗎?
查看完整描述

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"))

信不信由你,這個表達的語義是完全一樣的。


查看完整回答
反對 回復 2019-11-18
?
天涯盡頭無女友

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找到特定格式和替換格式中的捕獲組成為可能。


查看完整回答
反對 回復 2019-11-18
  • 3 回答
  • 0 關注
  • 839 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號