Joh*_*ohn 2 regex coldfusion coldfusion-9
<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>
Run Code Online (Sandbox Code Playgroud)
我期待的输出是bar bar我得到的$1 bar.如何在ColdFusion9中完成?
首先计算foo函数,然后将该函数的字符串结果传递给replaceAll,后者不知道它的输入是通过函数提供的.
String.replaceAll是一个Java方法,它接受正则表达式模式字符串和替换字符串 - 您不能直接传递回调函数.
解决这个问题的方法是使用我创建的cfRegex库 - 它有一个Replace函数,它允许你传入一个函数来对每个匹配执行.
这可以使用这样的东西:
<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>
Run Code Online (Sandbox Code Playgroud)