要求:我收到一封帶有模板的電子郵件,我需要從電子郵件中過濾掉一些文本。我將所有電子郵件正文文本轉換為字串。
電子郵件文本如下所示:
some body text which I don't need
Discussion:
Tue 26/04/2022/2:48 PM UTC 10/ ABC User-
TEST description - this should be logged as a comment. --- This is the part I need
ABC Company Australia | XYZ St | Sydney NSW 2000
我在想有一個正則運算式來尋找
- 一句話“討論”
- 下一行使用“Tue 26/04/2022/2:48 PM UTC 10/ABC User-”查找 DateTime 格式
- 拿起下一行,直到我們找到這一行 - “ABC Company Australia | XYZ St | Sydney NSW 2000”地址
是否可以?有人可以幫助使用正則運算式嗎?
TIA。
uj5u.com熱心網友回復:
如果只是關于 OP 感興趣的內容,那么下面的正則運算式已經足夠了....../Discussion:\n[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}.*\n (?<content>.*)/
const multilineMail = `Discussion:
Tue 26/04/2022/2:48 PM UTC 10/ ABC User-
TEST description - this should be logged as a comment. --- This is the part I need
ABC Company Australia | XYZ St | Sydney NSW 2000`;
// see ... [https://regex101.com/r/v8FXCA/3]
const regXMailContent =
/Discussion:\n[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}.*\n (?<content>.*)/;
console.log(
regXMailContent.exec(multilineMail)?.groups?.content
);
如果公司頁腳必須完全匹配,則必須使其成為上述正則運算式的一部分,如下所示.../Discussion:\n[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}.*\n (?<content>.*)\n ABC Company Australia \| XYZ St \| Sydney NSW 2000/
const multilineMail = `Discussion:
Tue 26/04/2022/2:48 PM UTC 10/ ABC User-
TEST description - this should be logged as a comment. --- This is the part I need
ABC Company Australia | XYZ St | Sydney NSW 2000`;
// see ... [https://regex101.com/r/v8FXCA/4]
const regXMailContent =
/Discussion:\n[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}.*\n (?<content>.*)\n ABC Company Australia \| XYZ St \| Sydney NSW 2000/;
console.log(
regXMailContent.exec(multilineMail)?.groups?.content
);
如果 OP 還想保存日期和用戶,可以增強第一個提供的正則運算式,例如 ...
/Discussion:\n(?<date>[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}).*\n (?<content>.*)//Discussion:\n(?<date>[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}\/[^/] )\/\s*(?<user>.*?)-?\s*\n (?<content>.*)/
const multilineMail = `Discussion:
Tue 26/04/2022/2:48 PM UTC 10/ ABC User-
TEST description - this should be logged as a comment. --- This is the part I need
ABC Company Australia | XYZ St | Sydney NSW 2000`;
// see ... [https://regex101.com/r/v8FXCA/2]
const regXMailDateAndContent =
/Discussion:\n(?<date>[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}).*\n (?<content>.*)/;
// see ... [https://regex101.com/r/v8FXCA/1]
const regXMailDateUserAndContent =
/Discussion:\n(?<date>[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}\/[^/] )\/\s*(?<user>.*?)-?\s*\n (?<content>.*)/;
console.log(
regXMailDateAndContent.exec(multilineMail)?.groups
);
console.log(
regXMailDateUserAndContent.exec(multilineMail)?.groups
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
但如果要提取的內容是多行文本,則正則運算式必須以公司頁腳為特征,以便識別正確的匹配項。第二個提供的正則運算式然后更改為.../Discussion:\n[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}.*\n (?<content>(?:.*\n)*)ABC Company Australia \| XYZ St \| Sydney NSW 2000/
const multilineMail = `Discussion:
Tue 26/04/2022/2:48 PM UTC 10/ ABC User-
TEST
description - this should be
logged as a comment. --- This is
the part I need
ABC Company Australia | XYZ St | Sydney NSW 2000`;
// see ... [https://regex101.com/r/v8FXCA/5]
const regXMailMultilineContent =
/Discussion:\n[a-zA-Z]{1,3}\s \d{2}\/\d{2}\/\d{4}.*\n (?<content>(?:.*\n)*)ABC Company Australia \| XYZ St \| Sydney NSW 2000/;
console.log(
regXMailMultilineContent.exec(multilineMail)?.groups?.content
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
上述所有正則運算式模式都使用named capturing groups.
uj5u.com熱心網友回復:
你可以試試這個正則運算式:
Discussion.*?\n ([A-Za-z] (?:\d{2}\/){2}\d{4}\/\d :\d [^\n] )(.*)?ABC Company Australia \| XYZ St \| Sydney NSW 2000
解釋:
Discussion.*?\n正則運算式從字串開始的地方Discussion開始。.*?\n一直在尋找額外的單詞和換行符([A-Za-z] (?:\d{2}\/){2}\d{4}\/\d :\d [^\n] )接下來,它會按照您的描述查找日期格式。它將獲取所有內容,直到到達換行符[^\n ](.*)?它將從上一個日期行獲取所有內容ABC Company Australia \| XYZ St \| Sydney NSW 2000并且只要找到它就會結束匹配。- 在這里,我將日期格式行保留在第 1 組中,將您需要的正文保留在第 2 組中
演示
來源:
const regex = /Discussion.*?\n ([A-Za-z] (?:\d{2}\/){2}\d{4}\/\d :\d [^\n] )(.*)?ABC Company Australia \| XYZ St \| Sydney NSW 2000/gms;
const str = `some body text which I don't need
Discussion:
Tue 26/04/2022/2:48 PM UTC 10/ ABC User-
TEST description - this should be logged as a comment. --- This is the part I need
ABC Company Australia | XYZ St | Sydney NSW 2000
`;
var match = regex.exec(str);
if(match!=null){
console.log(match[1]);
console.log(match[2]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/465821.html
標籤:javascript 正则表达式
下一篇:使用正則運算式捕獲兩個資訊
