You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mule 4中如何正确转义反斜杠(\)?

DataWeave反斜杠转义失效的解决办法

我写了一个用于替换特殊字符的DataWeave函数,其他特殊字符的转义都正常,但反斜杠()始终无法被正确转义。尝试在searchReplace数组中添加{ searchValue: "\", replaceValue: "\\" }完全没用,原函数代码如下:

%dw 2.0
output application/java

var searchReplace = [
        {
            searchValue: "?",
            replaceValue: "\?"
        },
        {
            searchValue: "&",
            replaceValue: "\&"
        },
        {
            searchValue: "|",
            replaceValue: "\|"
        },
        {
            searchValue: "!",
            replaceValue: "\!"
        },
        {
            searchValue: "^",
            replaceValue: "\^"
        },
        {
            searchValue: "~",
            replaceValue: "\~"
        },
        {
            searchValue: "*",
            replaceValue: "\*"
        },
        {
            searchValue: ":",
            replaceValue: "\:"
        },
        {
            searchValue: "+",
            replaceValue: "\+"
        },
        {
            searchValue: "'",
            replaceValue: "\'"
        },
        {
            searchValue: "-",
            replaceValue: "\-"
        },
        {
            searchValue: "{",
            replaceValue: "\{"
        },
        {
            searchValue: "}",
            replaceValue: "\}"
        },
        {
            searchValue: "[",
            replaceValue: "\["
        },
        {
            searchValue: "]",
            replaceValue: "\]"
        },
        {
            searchValue: "(",
            replaceValue: "\("
        },
        {
            searchValue: ")",
            replaceValue: "\)"
        }
]
fun replaceValuesArray(n,text,values) =
if (n == 0) text replace values[n].searchValue with(values[n].replaceValue) else replaceValuesArray(n - 1, text replace values[n].searchValue with(values[n].replaceValue), values)
var searchTerm = replaceValuesArray(sizeOf(searchReplace) - 1,payload.search, searchReplace)
---
if ((searchTerm == "") or (searchTerm == null)) "" else (searchTerm ++ "*")

问题原因

DataWeave中,单个反斜杠\是转义字符,用来表示特殊字符(比如换行、引号等)。如果要表示一个实际的反斜杠字符,必须用双反斜杠\\来转义。之前添加的条目里,searchValue: "\"会被DataWeave解析为不完整的转义序列,根本无法正确匹配输入中的反斜杠。

解决方法

在searchReplace数组中添加正确的反斜杠替换条目:

{
    searchValue: "\\",
    replaceValue: "\\\\"
}
  • searchValue: "\\":DataWeave会将其解析为单个反斜杠字符,用来匹配输入中的\
  • replaceValue: "\\\\":DataWeave会将其解析为两个反斜杠字符,也就是转义后的目标结果\\

修改后的完整代码

%dw 2.0
output application/java

var searchReplace = [
        {
            searchValue: "?",
            replaceValue: "\?"
        },
        {
            searchValue: "&",
            replaceValue: "\&"
        },
        {
            searchValue: "|",
            replaceValue: "\|"
        },
        {
            searchValue: "!",
            replaceValue: "\!"
        },
        {
            searchValue: "^",
            replaceValue: "\^"
        },
        {
            searchValue: "~",
            replaceValue: "\~"
        },
        {
            searchValue: "*",
            replaceValue: "\*"
        },
        {
            searchValue: ":",
            replaceValue: "\:"
        },
        {
            searchValue: "+",
            replaceValue: "\+"
        },
        {
            searchValue: "'",
            replaceValue: "\'"
        },
        {
            searchValue: "-",
            replaceValue: "\-"
        },
        {
            searchValue: "{",
            replaceValue: "\{"
        },
        {
            searchValue: "}",
            replaceValue: "\}"
        },
        {
            searchValue: "[",
            replaceValue: "\["
        },
        {
            searchValue: "]",
            replaceValue: "\]"
        },
        {
            searchValue: "(",
            replaceValue: "\("
        },
        {
            searchValue: ")",
            replaceValue: "\)"
        },
        // 新增的反斜杠替换条目
        {
            searchValue: "\\",
            replaceValue: "\\\\"
        }
]
fun replaceValuesArray(n,text,values) =
if (n == 0) text replace values[n].searchValue with(values[n].replaceValue) else replaceValuesArray(n - 1, text replace values[n].searchValue with(values[n].replaceValue), values)
var searchTerm = replaceValuesArray(sizeOf(searchReplace) - 1,payload.search, searchReplace)
---
if ((searchTerm == "") or (searchTerm == null)) "" else (searchTerm ++ "*")

内容的提问来源于stack exchange,提问作者SH4444KO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:35:59