基本用法
本项目中表达式引擎也支持模板的方式,例如动态拼接url
https://www.xxx.com/${path}/q?=keyword=${keyword}
运算符
模板语言支持大多数Java运算符。这些运算符的优先级也与Java中的相同。
类型
byte ${123b}
short ${123s}
int ${123}
long ${123l}
float ${123f}
double ${123d}
string ${'hello'}
string ${"hello"}
同时也支持定义Map和List
${{key : "value"}}
${[1,2,3,4,5]}
${{$key : "value"}}//$key表示动态从变量中获取key值
一元运算符
您可以通过一元运算-
符将数字取反,例如
${-234}
要取反布尔表达式,可以使用!
运算符,例如
${!true}
算术运算符
支持常见的算术运算符,例如
${1 + 2 * 3 / 4 % 2}
比较运算符
${23 < 34},${23 <= 34},${23 > 34},${23 >= 34},${ true != false },${23 == 34}
较运算符结果为boolean
类型
逻辑运算符
除了一元运算!
符,您还可以使用&&
和||
。就像Java中一样,运算符也是一种短路运算符。如果&&
左边计算为false
,则不会计算右边。如果||
左侧为true,则不会计算右边
三元运算符
三元运算符是if
语句的简写形式,其工作方式类似于Java中,例如
${true ? "yes" : "no"}
变量
${var}
通过${变量名}
调用
调用方法
${extract.xpath(resp.html,'//div[@id=abc]').regx('/\\d/').toInt()}
通过${变量.方法名(参数1,参数2,….)}
进行调用
数组和Map
${myArray[2]} ${myArray[indexVar]} ${myMap.get("key")} ${myMap["key"]} ${myMap.get(keyVar)} ${myMap[keyVar]}
链式调用
与Java中一样,您可以无限嵌套成员,数组元素和映射访问
${myObject.aField[12]["key"].someMethod(1, 2).anotherMethod()}
${extract.xpath(resp.html,'//div[@id=abc]').regx('/\\d/').toInt()}
正则表达式
对正则表达式和xpath语法的支持主要是基于ExtractFunctionExecutor这个类,使用extract前缀。
功能 | 示例 | 说明 |
根据jsonpath提取内容 | KaTeX parse error: Expected '}', got 'EOF' at end of input: …ath(resp.json,'.code’)} | 输入json, 返回json中的code字段值 |
根据正则表达式提取内容 | ${extract.regx(resp.html,‘(\d).?(\d).?(\d)’)} | 取出title标签中间的内容,默认取第1个 |
${extract.regx(resp.html,‘(\d).?(\d).?(\d)’,2)} | 取出title标签中间的内容,取指定位置的数据, 返回字符串 | |
${extract.regx(resp.html,‘(\d).?(\d).?(\d)’,[1,2])} | 取出title标签中间的内容,取指定位置的数据,返回数组 | |
${extract.regxs(resp.html,‘(\d).?(\d).?(\d)’)} | 取出title标签中间的内容,取指定位置的数据,返回数组,默认取第1个 | |
${extract.regxs(resp.html,‘(\d).?(\d).?(\d)’, [1, 2])} | 取出title标签中间的内容,取指定位置的数据,返回数组实战 |
正则实战
示例1: 使用正则取出"a5b8c9"中的数字
假设变量名为source:
取出数字8的表达式写法:
${extract.regx(source,‘(\d).?(\d).?(\d)’,2)}
取出8和9的表达式写法:
${extract.regx(source,‘(\d).?(\d).?(\d)’,[2, 3])}
取出所有数字的表达式写法:
${extract.regxs(source,‘(\d)’)}
验证输出: