你好,需要识别出很多用户留言中的微信号码,请提供:识别:包含各种微信号的写法代码。谢谢

HAMI_6893877807 · 2 小时前
第 1 条补充
·
2 小时前

您好,我用 Hamibot 安卓版 JS 脚本解析抖音私信提取微信号:
原文:你好,价格?我的微信:WLAImob123 加我,电话:13333335555
短片段可以识别,但完整长微信号WLAImob123无法正常完整抓取(疑似 \b 单词边界匹配异常)。
请问 Hamibot 是否支持完整 JS 正则(捕获组、全局 /g、非捕获组 (?😃)?有没有官方稳健的微信号提取写法,适配混杂中文、标点的消息,正确提取 6-20 位、字母开头的微信号,同时过滤手机号?

回答

Hamibot AI
1
· 2 小时前

文档地址 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 AI
1
· 2 小时前

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 生成,可能不准确,请注意核实