DataWeave正则匹配无结果:为何无法提取URL中的testvalue?
DataWeave正则匹配问题解决
原正则失效原因
DataWeave的match函数要求正则表达式完全匹配整个输入字符串,你写的/code=([^&]*)/只能匹配URL里的code=testvalue片段,无法覆盖整个URL内容,所以匹配失败,返回空结果。
解决方案
方法1:用find函数查找子串匹配
find函数会在输入字符串中查找所有符合正则的子串,不需要全匹配,更适合你的场景:
var test = 'https://test?code=testvalue&state=state' output application/java --- test find /code=([^&]*)/
执行后会返回包含匹配结果的数组,其中捕获组的testvalue可以通过result[0][1]获取。
方法2:修改正则实现全匹配
如果坚持用match,可以给正则前后加上.*(匹配任意字符任意次数),让整个正则覆盖整个URL:
var test = 'https://test?code=testvalue&state=state' output application/java --- test match /.*code=([^&]*).*/
此时匹配结果的捕获组1就是你要的testvalue。
方法3:用URL解析函数(推荐)
不需要正则,直接用DataWeave内置的parseUri函数解析URL查询参数,更可靠且代码更清晰:
var test = 'https://test?code=testvalue&state=state' output application/java --- parseUri(test).queryParams.code[0]
内容的提问来源于stack exchange,提问作者jay26
相关产品推荐
相关产品推荐

