我想知道如何用JavaScript中的大写字母替换捕获组。这是到目前为止我无法尝试的简化版本:
> a="foobar"
'foobar'
> a.replace( /(f)/, "$1".toUpperCase() )
'foobar'
> a.replace( /(f)/, String.prototype.toUpperCase.apply("$1") )
'foobar'
您能解释一下这段代码怎么了吗?
您可以将函数传递给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"))
信不信由过此表达式的语义完全相同。
我知道我晚会晚了,但是这是一种较短的方法,与您的初次尝试更相似。
[旧文章,但值得将@ChaosPandion答案扩展到RegEx受更多限制的其他用例。例如。确保(f)
或捕获组以特定格式/z(f)oo/
环绕:
SOLUTION
给出属性,值的字典(在这种情况下,对象为Map
),并使用答案中所述的.bind()
为什么我们不只是查找the definition?