Javascript Regex正在捕获一切,而不仅仅是;通配符;括号中-如何修复它?

Javascript Regex正在捕获一切,而不仅仅是;通配符;括号中-如何修复它?,javascript,regex,web-scraping,notepad++,Javascript,Regex,Web Scraping,Notepad++,我有以下字符串: <p class=MsoNormal><b>Customer Email: <o:p></o:p></b></p></td><td width=""75%"" valign=top style='width:75.0%;border:none;padding:0in 0in 11.25pt 0in'><p class=MsoNormal><a href=""mail

我有以下字符串:

<p class=MsoNormal><b>Customer Email: <o:p></o:p></b></p></td><td width=""75%"" valign=top style='width:75.0%;border:none;padding:0in 0in 11.25pt 0in'><p class=MsoNormal><a href=""mailto:username@gmail.com""">
在记事本++中测试上述正则表达式,它不只是匹配电子邮件地址,而是匹配从(包括)
“客户电子邮件”
到电子邮件地址后面的
的所有内容

我需要正则表达式来匹配电子邮件地址,正则表达式必须在记事本中进行匹配++


关于它为什么要匹配所有内容,而不仅仅是它在
(.*)

中应该匹配的内容,如果您能够使用JavaScript,我会建议以下解决方案。我认为它比正则表达式更好,正则表达式不应该以任何方式解析HTML

这是

var a=document.createElement(“div”);//创建一个包装器
a、 innerHTML='

客户电子邮件:

说明为什么它比使用正则表达式更好


在正则表达式中,通常使用


(?既然您能够使用JavaScript,我建议您使用以下解决方案。我认为它比正则表达式好,正则表达式不应该以任何方式解析HTML

这是

var a=document.createElement(“div”);//创建一个包装器
a、 innerHTML='

客户电子邮件:

说明为什么它比使用正则表达式更好


在正则表达式中,通常使用



(?它匹配的内容和捕获的内容完全不同。它将只捕获捕获组中的内容。尝试在代码中实际使用它。

它匹配的内容和捕获的内容完全不同。它将只捕获捕获组中的内容。尝试在代码中实际使用它。

这个*是野生字符。因此将匹配所有内容。是一个野生字符。这就是它匹配所有内容的原因。

是野生字符。因此它将匹配所有内容。是一个野生字符。这就是它匹配所有内容的原因。

您将RegExp与通配符混合。*是零或更多,是零或是您将RegExp与通配符混合。*不是所有正则表达式引擎都是相同的。使用适用的环境标记。在这种情况下,搜索“查找后面”或“捕获组”。您想用记事本++中的电子邮件地址做什么?如果您正在进行搜索和替换,您可以使用
\1
引用
(.*)
我并不是真的想在记事本中这样做,我想在uBot中这样做,uBot和记事本++在使用相同的正则表达式时返回相同的结果。换句话说,我对“正则表达式引擎”一无所知"但我知道正则表达式在notepad++和uBot中的工作原理是一样的,我想说我需要一个在uBot中工作的正则表达式会让人很困惑,因为没有人会知道我在说什么。@从使用uBot开始学习,JavaScript解决方案也可以吗?是的,可以。事实上,我对JavaScript更熟悉……除非我们谈论的是regex和javascript,在这种情况下,是的,这将起作用,但我或多或少不知道。不是所有正则表达式引擎都是相同的。使用适用的环境标记。在这种情况下,搜索“look behind”或“capture group”。您想用记事本++中的电子邮件地址做什么?如果您正在进行搜索和替换,可以使用
\1
引用
(*)捕获的内容
我并不是真的想在记事本中这样做,我想在uBot中这样做,uBot和notepad++在使用相同的正则表达式时返回相同的结果。换句话说,我对“正则表达式引擎”一无所知但我知道正则表达式在notepad++和uBot中的工作原理是一样的,我想说我需要一个在uBot中工作的正则表达式会让人很困惑,因为没有人会知道我在说什么。@从使用uBot开始学习,JavaScript解决方案也可以吗?是的,可以。事实上,我对JavaScript更熟悉……除非我们讨论的是regex和javascript,在这种情况下,是的,这会起作用,但我或多或少不知道。我对你的意思有点模糊……那么,我如何真正匹配电子邮件地址呢?我在这里找到的答案的基础上提出了我的原始问题:@Learning:在这里,regex匹配(或消耗)整个
元素(包括标记),但它也捕获了标签之间的内容。在大多数使用正则表达式的工具中,你可以只捕获部分而不是整个匹配项,但uBot的情况似乎并非如此。我对你的意思有点模糊……那么,我如何真正匹配电子邮件地址呢?我将这个正则表达式建立在我的原始问题之上我在这里找到的答案是:@Learning:regex匹配(或使用)整个
元素(包括标记),但它也捕获了标记之间的内容。在大多数使用正则表达式的工具中,您可以只捕获捕获的部分而不是整个匹配项,但uBot的情况似乎不是这样。当我在记事本++中对原始问题中给出的字符串使用正则表达式时,它匹配以下内容:

请参阅up过时的答案建议另一种方法假设JavaScript是合法的正如你在评论中所说,你应该编辑你的问题,以反映我最终选择了正确的答案,即“回头看”您建议的解决方案非常有效,只做了一些小的修改。以下正则表达式最终有效:(?我很高兴我能提供帮助,我已经更新了您最终使用的RegExp的答案。注意,我仍然建议在我的JavaScript答案中使用HTML解析方法。我刮了很多页面,结果始终比使用RegExp进行HTML解析更好

Customer Email.*?mailto:(.*?)"
var a = document.createElement("div"); //create a wrapper
a.innerHTML = '<p class=MsoNormal><b>Customer Email: <o:p></o:p></b></p></td><td width="\"75%\"" valign=top style=\'width:75.0%;border:none;padding:0in 0in 11.25pt 0in\'><p class=MsoNormal><a href="mailto:username@gmail.com">'; //your data
var ps = a.querySelectorAll("p"); //get all the p tags
var emails = [];
[].forEach.call(ps,function (pTag) { //for each p tag
    if(pTag.textContent.indexOf("Customer Email")===-1){
        return;//only add those with Costumer Email
    }
    var as= (pTag.querySelectorAll("a")); //get the links from it
    [].forEach.call(as,function(aTag){
        if(aTag.href && aTag.href.substring(0,7)==="mailto:"){ //for mailto links
           //got a match
               emails.push(aTag.href.substring(7)); //add the email address
        }
   });
});
console.log(emails); //emails now contains an array of your extracted emails
(?<=Customer Email.*?mailto:)(.*?)(?=")