如何解决如何在带有多个括号/括号的电子邮件主题中提取括号中的特定字符串?
这是当前代码:
var vendorNo = msg[j].getSubject().split('vendor No:')[1].replace(/[A-Za-z-0-9]+$/,'').slice(1,-1); //vendor number from email subject
我目前使用的代码,从带有单括号的电子邮件主题中提取供应商编号没有问题,但是当主题有多个括号时就会出现问题。
例如:
电子邮件主题:供应商 A(供应商编号:12345(EDC1))
输出:123456(EDC1)
期望输出:123456
或
电子邮件主题:供应商 B(供应商编号:987654)[ref:xxxxxxxxx]
输出:987654)[参考:xxxxxxxxx
期望输出:987654
当前代码不太正确,因为它提取了 vendor No:
之后的所有其他字符串,并且仅删除了提取后的最后一个字符。供应商编号也可能有所不同,可以是 5-8 个字符,可以是数字和字母的混合(例如 123CFT 或 1234567)。
我已经尝试过 .slice(1,7)
,但对于多于或少于字符数的字符串,它不灵活。
那么有没有办法让代码只提取特定括号内的字符串的一部分,即供应商编号?
解决方法
您可以拆分获取":"
之后的部分,并使用String.search
获取作为特殊字符的第一个字符的索引:
function getVendorNo(s) {
return a = s.split(":")[1].trim(),a.substring(0,a.search(new RegExp("[^a-zA-Z0-9]")));
}
console.log(getVendorNo("Supplier A (Vendor No.: 12345(EDC1))"));
console.log(getVendorNo("Supplier B (Vendor No.: 987654) [ref:xxxxxxxxx]"));
您可以使用任何一种正则表达式
/\d[^\W]+/
或
/\d\w+/
或
/(?=\d)\w+/
const str = "Email Subject: Supplier A (Vendor No.: 12345(EDC1))";
const result1 = str.match(/\d[^\W]+/);
const result2 = str.match(/\d\w+/);
const result3 = str.match(/(?=\d)\w+/);
console.log(result1)
console.log(result2)
console.log(result3)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。