DataWeave 2.0中scan方法正则匹配返回空数组求助
DataWeave 2.0 scan方法匹配失败的解决思路
问题根源
DataWeave的正则表达式语法中,用/.../包裹的正则字面量不需要对双引号额外转义,你写的/\"(NewLABEL.[a-zA-Z]*)/里的\"属于多余转义,反而会导致匹配不到字符串里实际的双引号。另外原正则里的.是通配符(匹配任意字符),如果要精准匹配目标里的点号,也需要转义。
修正方案
去掉双引号的转义,同时转义点号优化匹配精度,修正后的表达式:
$.message scan(/"(NewLABEL\.[a-zA-Z]*)"/)
如果需要匹配包含数字、下划线的标识,也可以用\w*替代[a-zA-Z]*,更通用:
$.message scan(/"(NewLABEL\.\w*)"/)
验证效果
针对输入字符串:
Field "NewLABEL.title" of required type "String!" was not provided.
执行修正后的scan方法,会返回结果:[["NewLABEL.title"]],其中嵌套数组的第一个元素就是你要提取的目标文本。如果只需要直接拿到目标值,可以再用map或索引提取:
($.message scan(/"(NewLABEL\.\w*)"/))[0][0]
内容的提问来源于stack exchange,提问作者somecoder
相关产品推荐
相关产品推荐

