Я хотел бы узнать, как заменить группу захвата ее прописными буквами в JavaScript. Вот упрощенная версия того, что я пробовал до сих пор и что не работает:
> a="foobar"
'foobar'
> a.replace( /(f)/, "$1".toUpperCase() )
'foobar'
> a.replace( /(f)/, String.prototype.toUpperCase.apply("$1") )
'foobar'
Не могли бы вы объяснить, что не так с этим кодом?
Почему мы только не ищем определение ?
, Если мы пишем:
a.replace(/(f)/, x => x.toUpperCase())
мы могли бы также просто сказать:
a.replace('f','F')
Хуже, я подозреваю, что никто не понимает, что их примеры работали только потому, что они получали целый regex с круглыми скобками. Если Вы смотрите определение , первый параметр передал эти replacer
, функция на самом деле целый подобранный шаблон а не шаблон, который Вы получили с круглыми скобками:
function replacer(match, p1, p2, p3, offset, string)
, Если Вы хотите использовать нотацию функции стрелки:
a.replace(/xxx(yyy)zzz/, (match, p1) => p1.toUpperCase()