从下面的文字中我需要提取电子邮件和名称。
Vicente Clark
vicente.clark@gmail.com
Mark van der Zant
mark.zant@protonmail.com
Georgy Collins
georgy.collins@yahoo.com
Paul Danilsson
paul.danilsson@live.com
我已经找到了电子邮件部分,但我需要将这些名称存储在一个单独的变量中。
使用新行可能无法很好地格式化文本。
答案 0 :(得分:1)
您可以使用此正则表达式:
(?:^|\r?\n)(.*?)\r?\n(.*?@.*?)(?=\r?\n|$)
(?:)
一个不匹配的群组(否则这将是第一个$1
)^|\r?\n
换行符(Windows \r\n
或UNIX \n
)或字符串的开头(第一个条目的开头没有换行符)(.*?)
任何内容,但尽可能少的字符(直到下一个换行符)(.*?@.*?)
与电子邮件地址匹配,但除了必须包含@
字符外,不进行任何验证(?=\r?\n|$)
模式必须跟\r?\n|$
后面,但它不匹配(这是必要的,否则,之后的换行符已经是这场比赛的一部分,因此不能成为下一场比赛)。 \r?\n|$
匹配换行符或字符串结尾。/g
)如果文本“并不总是使用换行符进行格式化”,则需要提供有关其结构的更多信息。正则表达式依赖于固定模式,需要单独处理每种可能性。
以下是JavaScript中的示例:
var text = document.getElementById('main').innerHTML;
var regex = /(?:^|\r?\n)(.*?)\r?\n(.*?@.*?)(?=\r?\n|$)/g;
var match = regex.exec(text);
while(match !== null) {
console.log(match[1] + ":", match[2]);
match = regex.exec(text);
}
#main {
white-space: pre;
font-family: monospace;
}
<div id="main">Vicente Clark
vicente.clark@gmail.com
Mark van der Zant
mark.zant@protonmail.com
Georgy Collins
georgy.collins@yahoo.com
Paul Danilsson
paul.danilsson@live.com</div>