【完美解决】求一段Nodejs的邮箱正则表达式,用于匹配采集匹配的。

【完美解决】求一段Nodejs的邮箱正则表达式,用于匹配采集匹配的。

求一段nodejs的邮箱正则表达式,用于匹配采集匹配的。 多谢,我试了很多正则都无效。 代码如下:

	request = require('request');
var qHref= "http://www.douban.com/group/topic/10712106/";
//定义函数
	var getAHref = function(htmlstr){
//	    var reg = /<a.+?href=('|")?([^'"]+)('|")?(?:\s+|>)/gim;  //有效
	   var reg= /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; //无值
	    var arr = [];
	    while(tem=reg.exec(htmlstr)){
	    	console.log("reg.exec(htmlstr)"+reg.exec(htmlstr));//好像没有进来执行
	    	console.log("tem[1]"+tem);//好像没有进来执行
	        arr.push(tem[2]);
	    }
	    return arr;
	}
exports. sp  = function(){
	request.get({url:qHref,headers:{'User-Agent': 'request'}}, function (error, response,data) {
		console.log('response.statusCode:'+response.statusCode);
	      if (!error && response.statusCode == 200) {
//	          console.dir(data);
	          var content = data;//获取到网页内容
	          var hrefs=getAHref(content);//获取链接
	           console.log(hrefs);  
	    }
	});
}

5 回复

当然可以。根据您的需求,我们可以通过修改现有的代码来实现一个有效的邮箱正则表达式,并确保它能够正确地从网页内容中提取邮箱地址。

修改后的代码

const request = require('request');

var qHref = "http://www.douban.com/group/topic/10712106/";

// 定义函数
var getAHref = function(htmlstr) {
    // 使用更严格的邮箱正则表达式
    var reg = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
    
    var arr = [];
    let match;
    while ((match = reg.exec(htmlstr)) !== null) {
        arr.push(match[0]);
    }
    return arr;
}

exports.sp = function() {
    request.get({ url: qHref, headers: { 'User-Agent': 'request' } }, function(error, response, data) {
        console.log('response.statusCode:' + response.statusCode);
        if (!error && response.statusCode == 200) {
            const content = data; // 获取到网页内容
            const emails = getAHref(content); // 获取邮箱地址
            console.log(emails);
        }
    });
}

解释

  1. 正则表达式:

    • /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g 是一个比较严格的邮箱正则表达式。
      • \b 表示单词边界,确保匹配的是完整的邮箱地址。
      • [A-Za-z0-9._%+-]+ 匹配邮箱的用户名部分,允许字母、数字、下划线、点号、百分号、加号和减号。
      • @ 是邮箱地址中的必选字符。
      • [A-Za-z0-9.-]+ 匹配域名部分,允许字母、数字、点号和减号。
      • \.[A-Z|a-z]{2,} 确保域名后缀至少有两个字符(如 .com, .net 等)。
  2. 循环匹配:

    • 使用 while ((match = reg.exec(htmlstr)) !== null) 循环匹配所有符合正则表达式的邮箱地址,并将它们添加到数组 arr 中。
  3. 输出结果:

    • 在请求成功后,从响应数据中提取内容,并调用 getAHref 函数提取邮箱地址,最后输出这些邮箱地址。

这样,您就可以使用这段代码来从网页内容中提取并匹配邮箱地址了。


无效的正则表达式

var	reg= /[^\@\s]{1,}\@(?:[^\s\.]{1,}\.){1,}(?:[a-z]{2,4}\.?){1,2}/gim ;   

正则换成这个有效。但是好像出来的东西有点不对头。

tem:<br/>欢迎给我发邮件:guanertw@126.com tem:class="">myhyukie@hotmail.com tem:class="">letaapple@live.cn tem:class="">我留下我的邮箱你会给我回邮件吗?我要是的是长期电邮的那种,如果你不 是,不用给我回了!dearlaosun@126.com tem:class="">ycat@live.cn tem:<br/>wanglin401c@163.com tem:class="">我每天打开电脑的第一件事情就是打开我的邮箱,查看有没有人给我联系, 六年了,我那些个熟悉的朋友,一个都没有给我发送过邮件,郁闷男+邮箱控+黑莓控等着您 的来信,gupem@163.com/yothox@gmail.com tem:想认识请电邮到:shuyang_7@sina.com tem:class="">igupem@gmail.com tem:class="">whb.punk@163.com tem:class="">我是来自成都的女生,我的邮件是cydhy678@163.com tem:class="">zhuzhumao@msn.com tem:class="">352909232@qq.com tem:class="">danny_handsome@man.com tem:class="">1981065697@qq.com tem:class="">confessioninfame@163.com tem:class="">475448990@qq.com tem:zourifeng@live.com tem:class="">freetianlan@hotmail.com

修改以下2处完美解决: var reg= /[\w!#$%&’+/=?^_{|}~-]+(?:\.[\w!#$%&'*+/=?^_{|}~-]+)@(?:\w?.)+\w?/gim; arr.push(tem[0]);

回答

邮箱正则表达式的编写需要考虑到一些特殊情况,比如 ., - 等字符的使用。以下是经过调整后的邮箱正则表达式示例:

var emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

这段正则表达式可以匹配大多数标准的电子邮件地址。下面是修改后的 getAHref 函数示例:

function getAHref(htmlstr) {
    var reg = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
    var matches = htmlstr.match(reg);
    return matches ? matches : [];
}

exports.sp = function() {
    request.get({ url: qHref, headers: { 'User-Agent': 'request' } }, function(error, response, data) {
        if (!error && response.statusCode == 200) {
            var emails = getAHref(data);
            console.log(emails);
        }
    });
};

解释

  1. 正则表达式:新的正则表达式 /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g 更加灵活,能够匹配包含特殊字符(如 ., -, _, %, +, -)的电子邮件地址。

  2. 函数修改:在 getAHref 函数中,使用 htmlstr.match(reg) 来获取所有匹配的电子邮件地址,返回一个数组。

  3. 请求处理:在 sp 函数中,请求网页内容并传递给 getAHref 函数以提取电子邮件地址,并输出结果。

这样修改后,你的代码应该能够正确匹配并采集网页中的电子邮件地址了。

回到顶部