删除用户写下的所有文字
我用Outlook API
取出发送的电子邮件正文。现在,我想清理所有的链接,标题等,并只保留用户编写的文本。以下是我的正则表达式功能:删除用户写下的所有文字
function getRegex() {
var regex1 = /^(?=.*Forwarded message)[^]*/m;
var regex2 = /^(?=.*From:)[^]*/m;
var regex3 = /^(?=.*On)[^]*/m;
var regex4 = /^(?=.*http)[^]*/m;
return new RegExp("(" + regex1.source + ")|(" + regex2.source + ")|(" + regex3.source + ")|(" + regex4.source + ")");
}
以下是功能从Outlook获取发送的电子邮件:
outlook.mail.getMessages({
token: token.token.access_token,
odataParams: queryParams,
folderId: 'SentItems'
}, function (err, result) {
if (err){
console.log(err);
return;
}
var mail_array = result.value;
var outlook_sent_emails = '';
mail_array.forEach(function (mail) {
if (mail.BodyPreview !== '') {
outlook_sent_emails += (mail.BodyPreview + " ");
}
});
console.log(outlook_sent_emails.replace(getRegex(), "")); //This is not working
});
此行console.log(outlook_sent_emails.replace(getRegex(), ""));
表明我仍然得到所有的链接,标题等
的同样的正则表达式在我的代码中的其他地方工作。
编辑:
示例文字:
From: <Name>
Sent: <Datetime>
To: <Name>
Subj Dear Sir/Madam
Hi Vaibhav,
Hope you are doing well.
http://developer.android.com/sdk/index.html
Sent from my Windows 10 phone
我想删除所有类型的链接和文字一样从字符串如下:
From: <Name>
Sent: <Datetime>
To: <Name>
Subj Dear Sir/Madam
预期的输出:
Hi Vaibhav,
Hope you are doing well.
更新:加入HTTP
你可以试试这个:
^.*(From:|Sent:|Sent\s+From|To:|Subj|Dear\s+(Sir|Madam)|http).*$
,并通过 “”
const regex = /^.*(From:|Sent:|Sent\s+From|To:|Subj|Dear\s+(Sir|Madam)|http).*$/gmi;
const str = ` From: <Name>
Sent: <Datetime>
To: <Name>
Subj Dear Sir/Madam
Hi Vaibhav,
Hope you are doing well.
http://developer.android.com/sdk/index.html
Sent from my Windows 10 phone`;
const subst = ``;
const result = str.replace(regex, subst).trim();
console.log(result);
更新为每最新的示例I/O –
嘿,这的确工作。谢谢@Rizwan M. Tuman –
@Vaibhav Agarwal,很高兴知道它为你工作..我想你知道,你想要取代什么,也知道目标邮件为你想申请:) –
如果你想检查整个*文本中是否有'http',你需要在lookahead中使用'[^] *',和消费模式部分一样。尝试用'[^] *'替换所有'。*'。 –
@WiktorStribiżew这样做会清除所有文本,并且我得到空白结果。 –
是的,因为现在你的正则表达式匹配:)并且按照预期工作,因为'[^] *'是贪婪的并且可以匹配任何*字符。考虑你的要求并发布它们。现在,由于我们不知道内容是什么样,所以不可能帮助你。 –