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

时间:2019-08-14 15:27:34

标签: mule dataweave

m子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)]

一个更详细的示例是,存在一个具有以下结构的表:

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

然后我们查询该表并将其存储在变量中:

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

1 个答案:

答案 0 :(得分:3)

嗨,在DW 1.0中无法做到这一点,因为将匹配项与字符串一起使用会将字符串转换为原义正则表达式,因此不会被解释。唯一的解决方案是创建一个全局mel函数,并从DW代码中调用它。