如何修改JavaScript正则表达式以正确提取名称/邮箱与日期信息?
正则表达式提取内容问题
输入示例
input1 = 'firstName.lastName@email.com - Fri, 19 May 2023 10:13:23 GMT Test Task from firstName.lastName@email.com' input2 = 'firstNamelastName@email.com - Fri, 19 May 2023 10:13:23 GMT Test Task from firstNamelastName@email.com' input3 = 'someName - Fri, 19 May 2023 10:13:23 GMT Test Task from someName'
期望输出
output1 = firstName.lastName@email.com - Fri, 19 May 2023 10:13:23 GMT output2 = firstName@email.com - Fri, 19 May 2023 10:13:23 GMT output3 = someName - Fri, 19 May 2023 10:13:23 GMT
问题场景
尝试使用以下正则提取内容:
regularEx = /\w+\.[a-zA-Z]+\s-\s\w{3},\s\d{1,2}\s[a-zA-Z]{3,9}\s\d{4}\s\d{1,2}:\d{1,2}:\d{1,2}\s[a-zA-Z]{3}/g myInput = 'firstName.lastName@email.com - Fri, 19 May 2023 10:13:23 GMT Test Task from firstName.lastName@email.com' regularEx.exec(myInput);
得到错误输出:
[ "com - Fri, 19 May 2023 10:13:23 GMT" ]
需要修改正则以获取预期的完整匹配结果。
解决方案
原正则开头的\w+\.[a-zA-Z]+仅能匹配类似xxx.com的片段,无法覆盖带@的邮箱或纯名称的场景,导致只捕获到了末尾的部分内容。
修改后的正则表达式
推荐两种方案:
- 精准匹配方案:针对开头的标识(邮箱/纯名称),使用
[\w@.]+匹配包含字母、数字、@、.的内容:
const regularEx = /[\w@.]+\s-\s\w{3},\s\d{1,2}\s[a-zA-Z]{3,9}\s\d{4}\s\d{1,2}:\d{1,2}:\d{1,2}\s[a-zA-Z]{3}/;
- 通用匹配方案:使用非贪婪模式匹配到
-及后续时间部分结束,兼容性更强:
const regularEx = /.*?\s-\s\w{3},\s\d{1,2}\s[a-zA-Z]{3,9}\s\d{4}\s\d{2}:\d{2}:\d{2}\s[a-zA-Z]{3}/;
验证代码
// 使用精准匹配方案测试 const regularEx = /[\w@.]+\s-\s\w{3},\s\d{1,2}\s[a-zA-Z]{3,9}\s\d{4}\s\d{1,2}:\d{1,2}:\d{1,2}\s[a-zA-Z]{3}/; const input1 = 'firstName.lastName@email.com - Fri, 19 May 2023 10:13:23 GMT Test Task from firstName.lastName@email.com'; console.log(regularEx.exec(input1)[0]); // 输出:firstName.lastName@email.com - Fri, 19 May 2023 10:13:23 GMT const input2 = 'firstNamelastName@email.com - Fri, 19 May 2023 10:13:23 GMT Test Task from firstNamelastName@email.com'; console.log(regularEx.exec(input2)[0]); // 输出:firstNamelastName@email.com - Fri, 19 May 2023 10:13:23 GMT const input3 = 'someName - Fri, 19 May 2023 10:13:23 GMT Test Task from someName'; console.log(regularEx.exec(input3)[0]); // 输出:someName - Fri, 19 May 2023 10:13:23 GMT
内容的提问来源于stack exchange,提问作者Aditya Kumar
相关产品推荐
相关产品推荐

