用Java大写替换正则表达式捕获组

问题描述 投票:67回答:6

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

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

您能解释一下这段代码怎么了吗?

javascript regex replace uppercase
6个回答
141
投票

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

信不信由过此表达式的语义完全相同。


11
投票

我知道我晚会晚了,但是这是一种较短的方法,与您的初次尝试更相似。


6
投票

[旧文章,但值得将@ChaosPandion答案扩展到RegEx受更多限制的其他用例。例如。确保(f)或捕获组以特定格式/z(f)oo/环绕:


1
投票

SOLUTION


0
投票

给出属性,值的字典(在这种情况下,对象为Map),并使用答案中所述的.bind()


0
投票

为什么我们不只是查找the definition

© www.soinside.com 2019 - 2024. All rights reserved.