gpt4 book ai didi

regex - 在 ColdFusion 中使用带有 String.replaceAll 的函数

转载 作者:行者123 更新时间:2023-12-02 05:29:54 27 4
gpt4 key购买 nike

<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>

我期望的输出是 bar bar 但我得到的是 $1 bar。这在 ColdFusion9 中如何完成?

最佳答案

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

String.replaceAll是一种接受正则表达式模式字符串和替换字符串的 Java 方法 - 您不能直接传递回调函数。


一个解决方案是使用 cfRegex library我已经创建 - 这有 a Replace function这让您可以传入一个针对每个匹配项执行的函数。

这可以像这样使用:

<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>

关于regex - 在 ColdFusion 中使用带有 String.replaceAll 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12532189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com