Regex 在ColdFusion中使用带有String.replaceAll的函数 #ARGUMENTS.default# #LOCAL.derp#

Regex 在ColdFusion中使用带有String.replaceAll的函数 #ARGUMENTS.default# #LOCAL.derp#,regex,coldfusion,coldfusion-9,Regex,Coldfusion,Coldfusion 9,我期望的输出是bar,但我得到的是$1 bar。如何在ColdFusion9中实现这一点?首先计算foo函数,然后将该函数的字符串结果传递给replaceAll,而replaceAll不知道其输入是通过函数提供的 是一个Java方法,它接受一个正则表达式模式字符串和一个替换字符串-您不能直接传入回调函数 解决这个问题的一个方法是使用我已经创建的函数,它允许您传入一个针对每个匹配执行的函数 可以这样使用: <cffunction name="foo"> <cfargu

我期望的输出是
bar
,但我得到的是
$1 bar
。如何在ColdFusion9中实现这一点?

首先计算foo函数,然后将该函数的字符串结果传递给replaceAll,而replaceAll不知道其输入是通过函数提供的

是一个Java方法,它接受一个正则表达式模式字符串和一个替换字符串-您不能直接传入回调函数


解决这个问题的一个方法是使用我已经创建的函数,它允许您传入一个针对每个匹配执行的函数

可以这样使用:

<cffunction name="foo">
     <cfargument name="default">
     <cfoutput>#ARGUMENTS.default#</cfoutput>
     <cfreturn ARGUMENTS.default />
</cffunction>

<cfset LOCAL.derp = "((bar))" />
<cfset LOCAL.derp = LOCAL.derp.replaceAll("\(\((.*)\)\)", foo('$1')) />
<cfoutput>#LOCAL.derp#</cfoutput>

#参数。组[1]。匹配#

我无法使用正则表达式,但仅供参考
replaceAll
不是ColdFusion函数。这是一种方法。(修订问题标题)
<cfset Local.Derp = RegexReplace
    ( Pattern     = '\(\((.*)\)\)'
    , Text        = Local.Derp
    , Replacement = replaceWithG1AndOutput
    ) />

<cffunction name="replaceWithG1AndOutput" returntype="String" output=true>
    <!---
        Use Arguments.Match for "((bar))"
        or Arguments.Groups[1].Match for "bar"
    --->
    <cfoutput>#Arguments.Groups[1].Match#</cfoutput>
    <cfreturn Arguments.Groups[1].Match />
</cffunction>