DataWeave 匹配 Mulesoft 3.9 中的动态正则表达式

DataWeave matching on dynamic regex in Mulesoft 3.9

mule 3.9 中的 dataweave 是否有办法匹配存储在变量中的正则表达式?

最简单的例子是:

<!-- does not work -->
<dw:transform-message doc:name="Get value">
    <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
payload matches flowVars.regex
]]></dw:set-payload>
</dw:transform-message>

但这可以使用 MEL #[payload.matches(flowVars.regex)] 或简单地解决 #[regex(flowVars.regex)]

一个更详细的例子是,有一个 table 具有以下结构:

regex   | value
--------------------
^typeA$ | valuefor-A
^typeB$ | valuefor-B

然后我们查询这个table并存储在一个变量中:

-- not real mule code
select regex, value
from tablewithregexdefinitions
into flowVars.RegexDefinitions

然后,我们尝试获取正则表达式匹配 payload 字段的应用条目:

<dw:transform-message doc:name="Get value">
    <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
(flowVars.RegexDefinitions filter (payload.field matches $.regex))[0].value default "fallback-value"
]]></dw:set-payload>
</dw:transform-message>

您好,在 DW 1.0 中无法做到这一点,因为当使用字符串匹配时会将字符串转换为文字正则表达式,因此不会对其进行解释。唯一的解决方案是创建一个全局 mel 函数并从 DW 代码中调用它。