为了账号安全,请及时绑定邮箱和手机立即绑定

用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 关注
  • 726 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信