在DataWeave中匹配URL的适用正则表达式是什么?
你现有代码匹配失败的两个核心原因:
- 正则强制要求URL以
http://或https://开头,你测试用的mycompany.com没有协议前缀,无法命中规则。 - 正则中路径匹配部分的
//未转义,在DataWeave的正则语法中,正斜杠需要加反斜杠转义为\/,否则会识别为正则结束标记导致语法异常。
适配DataWeave的可用正则(分两种场景)
场景1:兼容带/不带HTTP/HTTPS协议的URL匹配
正则表达式:/^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/
示例测试代码:
%dw 2.0 var myString = "mycompany.com" output application/json --- { // 判断全串是否符合URL规则,返回布尔值用matches isMatch: myString matches /^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/, // 提取匹配内容用match matchResult: myString match /^(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/ }
运行返回结果:
{ "isMatch": true, "matchResult": ["mycompany.com", null, null, ""] }
场景2:要求URL必须带HTTP/HTTPS协议
只需把正则开头的可选标记?删除即可,正则如下:/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/
补充说明
- 仅需要判断字符串是否符合URL格式时,优先用
matches函数,直接返回布尔值,逻辑更简洁。 - 如果需要提取URL中的协议、域名、路径等分组内容,再使用
match函数,返回的数组对应全匹配结果和各个分组的匹配值。
内容的提问来源于stack exchange,提问作者SH4444KO
相关产品推荐
相关产品推荐

