用Javascript中的大写替换正则表达式捕获组

埃文·卡洛尔(Evan Carroll):

我想知道如何用JavaScript中的大写字母替换捕获组。这是到目前为止我没有尝试过的工作的简化版本:

> a="foobar"
'foobar'
> a.replace( /(f)/, "$1".toUpperCase() )
'foobar'
> a.replace( /(f)/, String.prototype.toUpperCase.apply("$1") )
'foobar'

您能解释一下这段代码有什么问题吗?

ChaosPandion:

您可以将函数传递给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"))

信不信由你,这个表达的语义是完全一样的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章