Replace 函数中的 coldfusion 错误

coldfusion bug in Replace function

这是我的程序:

<cfset test = 'a~b~~c~d~~~e'>
<cfset test2 = Replace(test, '~~','~X~','all')>
<cfoutput>  
        test  #test# 
   <br> test2 #test2# 
   <br>wanted: a~b~X~c~d~X~X~e
</cfoutput>

我得到的输出:

test a~b~~c~d~~~e  
test2 a~b~X~c~d~X~~e  
wanted: a~b~X~c~d~X~X~e   

所以 test2 的输出是错误的这无疑与 Replace 函数的内部工作有关,但我需要它才能正常工作。

有人知道这个问题的解决方法吗?

这不是错误。

Replace() doesn't have any special "lookaround"能力。它只是遍历输入字符串,直到找到 ~~。然后跳转到下一个字符 - after 匹配的文本 - 并继续搜索。结果只有两场比赛。

听起来更像是要求在任意两个波浪号“~~”之间插入一个“X”。具有非捕获前瞻性的正则表达式应该可以做到这一点。

 reReplace(test, '~(?=~)','~X','all')

说明

  • ~ 查找代字号
  • (?=~) .. 后跟另一个波浪号

Demo Example