我试图提取特定的字符串在一个括号内的电子邮件主题。
以下是当前代码:
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)
输出: 987654) [参考:xxxxxxxxx
预期产出: 987654
当前代码并不完全正确,因为它在Vendor No:
之后提取所有其他字符串,并且只在提取之后删除最后一个字符。供应商的号码也可能不同,它可以从5-8个字符,可以混合数字和字母(例如。123或1234567)。
我尝试过.slice(1, 7)
,但对于多少字符数的字符串,它并不灵活。
那么,是否有一个解决方案,以便代码只提取特定括号中字符串的一个部分,即供应商编号?
发布于 2021-07-19 03:26:48
您可以拆分以获得":"
之后的部分,并使用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]"));
发布于 2021-07-19 03:31:10
您可以使用任何一个正则表达式。
/\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)
https://stackoverflow.com/questions/68434694
复制相似问题