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 代码中调用它。
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 代码中调用它。