你好,需要识别出很多用户留言中的微信号码,请提供:识别:包含各种微信号的写法代码。谢谢
第 1 条补充
· 13 小时前
您好,我用 Hamibot 安卓版 JS 脚本解析抖音私信提取微信号:
原文:你好,价格?我的微信:WLAImob123 加我,电话:13333335555
短片段可以识别,但完整长微信号WLAImob123无法正常完整抓取(疑似 \b 单词边界匹配异常)。
请问 Hamibot 是否支持完整 JS 正则(捕获组、全局 /g、非捕获组 (?😃)?有没有官方稳健的微信号提取写法,适配混杂中文、标点的消息,正确提取 6-20 位、字母开头的微信号,同时过滤手机号?
回答
文档地址 https://docs.hamibot.com/
// 识别文本中的微信号
function extractWeChatIds(text) {
// 匹配常见微信号格式,支持中文说明前缀
// 微信号: 6-20位字母、数字、下划线、减号,不能是纯数字
// 前缀:微信、wx、vx、v、微信号等,忽略大小写和空格
var regex = /(?:微信|wx|vx|v|微信号)\s*[::]?\s*([a-zA-Z0-9_-]{6,20})/gi;
var matches = [];
var match;
while ((match = regex.exec(text)) !== null) {
var id = match[1];
// 过滤纯数字(微信号不能是纯数字)
if (!/^\d+$/.test(id)) {
matches.push(id);
}
}
// 去重
var unique = [];
for (var i = 0; i < matches.length; i++) {
if (unique.indexOf(matches[i]) === -1) {
unique.push(matches[i]);
}
}
return unique;
}
// 示例使用
var text = "请加微信:abc123_def,或者VX: test-001,我微信号是 hello_world。";
var ids = extractWeChatIds(text);
console.log(ids);
如果需要直接从控件文本中提取,可以结合控件操作:
// 获取某个控件文本并提取微信号
var text = text("留言内容").findOne().text();
var ids = extractWeChatIds(text);
log(ids);
ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot 使用的 JavaScript 引擎 (Rhino 1.7.15) 完全支持捕获组、全局 /g、非捕获组 (?:) 等正则特性,你的思路没问题。问题出在 \b 单词边界对中文无效——在 Rhino 里,中文字符不被视为单词字符,导致 \b 匹配异常,难以正确截断。
这里提供一个专门适配中文混合消息、绕过 \b 缺陷的稳健写法:
文档地址 https://docs.hamibot.com/
/**
* 从混杂中文、标点的文本中提取微信号
* 规则:6-20位,字母开头,可包含字母、数字、下划线、减号
* 自动过滤纯数字(手机号等),不使用 \b 避免中文匹配问题
*/
function extractWeChatIds(text) {
if (!text) return [];
// 前边:非字母数字_- 或字符串开头
// 后边:零宽前瞻,非字母数字_- 或字符串结尾
var regex = /(?:[^a-zA-Z0-9_-]|^)([a-zA-Z][a-zA-Z0-9_-]{5,19})(?=[^a-zA-Z0-9_-]|$)/g;
var ids = [];
var match;
while ((match = regex.exec(text)) !== null) {
var id = match[1];
// 额外过滤:纯数字或手机号不会出现(因为字母开头已保证),但可加一层保险
if (!/^\d+$/.test(id)) {
// 去重
if (ids.indexOf(id) === -1) {
ids.push(id);
}
}
}
return ids;
}
// 测试
var raw = "你好,价格?我的微信:WLAImob123 加我,电话:13333335555";
var result = extractWeChatIds(raw);
log(result); // 输出 ["WLAImob123"]
为什么这个正则更稳健:
- 用
(?:[^a-zA-Z0-9_-]|^)和(?=[^a-zA-Z0-9_-]|$)手动构造边界,不依赖\b,中文、标点、空格都能正确截断。 - 微信号必须字母开头
[a-zA-Z],天然排除纯数字手机号。 - 长度 6-20 位,精确匹配微信 ID 规则。
- 循环
exec使用全局标志,不会遗漏多个微信号。
如果你需要从控件文本中提取,直接传入控件内容即可:
var content = text("消息内容").findOne().text();
var ids = extractWeChatIds(content);
log(ids);
这样就能在 Hamibot 安卓端稳定抓取长微信号,不会再出现长 ID 被截断的问题。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实