回答
获取文本文字中的数字
在 Hamibot 中获取文本文字中的数字,有以下几种常用方法:
方法一:使用正则表达式提取数字
// 文档地址 https://docs.hamibot.com/
'ui';
// 示例文本
var text = "订单号:12345,金额:99.50 元,数量:3 个";
// 提取所有整数
var numbers = text.match(/\d+/g);
log("所有整数:" + numbers); // ["12345", "99", "50", "3"]
// 提取所有数字(包括小数)
var decimalNumbers = text.match(/\d+\.?\d*/g);
log("所有数字:" + decimalNumbers);
// 提取特定格式的数字,如 6 位订单号
var orderNo = text.match(/\d{6}/g);
log("订单号:" + orderNo);
方法二:从 UI 控件获取文字并提取数字
// 文档地址 https://docs.hamibot.com/
'ui';
ui.layout(
<frame>
<text id="example" text="余额:100.50 元" />
</frame>
);
// 获取控件文本
var text = ui.example.attr('text');
// 提取数字
var numbers = text.match(/\d+\.?\d*/g);
if (numbers) {
var amount = parseFloat(numbers[0]);
log("提取的金额:" + amount);
}
方法三:从屏幕 OCR 识别后提取数字
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
if (!requestScreenCapture()) {
toastLog('没有授予 Hamibot 屏幕截图权限');
hamibot.exit();
}
sleep(1000);
// 截屏
var img = captureScreen();
// OCR 识别文字
var text = ocr.recognizeText(img);
log("识别结果:" + text);
// 提取数字
var numbers = text.match(/\d+\.?\d*/g);
if (numbers) {
log("找到的数字:" + numbers);
}
img.recycle();
hamibot.exit();
方法四:使用 UiSelector 查找包含数字的控件
// 文档地址 https://docs.hamibot.com/
// 使用正则匹配控件文本中的数字
var selector = textMatches("\\d+");
var widgets = selector.find();
widgets.forEach(function(widget) {
var text = widget.text();
log("包含数字的文本:" + text);
});
常用正则表达式参考
| 表达式 | 说明 |
|---|---|
/\d+/ |
匹配一个或多个数字 |
/\d+\.\d+/ |
匹配小数 |
/\d+\.?\d*/ |
匹配整数或小数 |
/\d{6}/ |
匹配 6 位数字 |
/\d{4}-\d{2}-\d{2}/ |
匹配日期格式 |
注意事项
-
正则表达式格式:如果使用字符串形式的正则,需要用
\\表示\,例如textMatches("\\d+");如果使用 JavaScript 正则字面量则不需要,例如textMatches(/\d+/) -
空值处理:
match()方法在没有匹配时返回null,使用前需要判断 -
类型转换:提取的数字是字符串,需要用
parseInt()或parseFloat()转换为数字类型 -
Rhino 兼容性:避免使用箭头函数、默认参数等新语法
根据你的具体场景选择合适的方法即可。
ℹ️ 本回答由 AI 生成,内容仅供参考