提取位于N个括号

时间:2018-03-20 10:18:43

标签: javascript regex

每天我收到这种电子邮件都是自动生成的 我的目标是使用正则表达式或脚本代码来选择两个外括号之间的所有文本。

示例:测试测试(a)(b)(aaaaa(bbbb(cccc))dddd(ee)fff)测试测试

结果:(a)(b)(aaaaa(bbbb(cccc))dddd(ee)fff)

这是身体电子邮件:

  

所有文件均经版权许可复制   所有者。禁止进一步复制或分发   允许。请不要直接回复此电子邮件。    ProQuest搜索提醒 ProQuest对话框会将提醒每日发送至:   电子邮件地址: productcostumer@sap.com   警报名称:竞争对手   警报ID: 560083   报道日期: 2018年3月15日至2018年3月16日   由我的研究帐户创建:杰克(史密斯杰克)

     

主题:(ti,ab(((Abbott near / 10(化验* OR测试* OR分析* OR 数组))或(雅培p / 1点P / 1护理)或建筑或(细胞p / 0 DYN))或((Alere接近/ 10(测定* OR测试* OR分析* OR 阵列))或   (Alere NEAR / 5(Triage P / 1 System))或INRatio或Afinion)或   ((Beckman * p / 1 Coulter接近/ 10(测定* OR测试* OR分析* OR   数组))OR((Beckman * p / 0 Coulter)接近/ 2 AU ????)OR(UniCel * P / 1 DxC)OR(UniCel * p / 1 DxI)OR(Beckman) *近/ 5访问)或(访问*   p / 1 Systeme)OR(CytoFLEX OR(cyto p / 0 flex))OR(UniCel * p / 1 ...   警报关键字:竞争对手

     

在ProQuest Dialog上。查看可用格式的文档(例如,   引文/摘要,全文等)。将文档导出为PDF,RTF,   XML等

     

找到1个新文件(ti,ab(((雅培近/ 10(化验* OR测试* OR   分析*或数组))或(雅培p / 1点P / 1护理)或建筑师或   (CELL p / 0 DYN))OR((Alere near / 10(测定* OR测试* OR分析* OR    array ))OR(Alere NEAR / 5(Triage P / 1系统))或INRatio或Afinion)OR((Beckman * p / 1 Coulter near / 10)(化验* OR测试* OR分析*   或数组))或((Beckman * p / 0 Coulter)接近/ 2 AU ????)或(UniCel *   P / 1 DxC)OR(UniCel * p / 1 DxI)OR(Beckman * near / 5 Access)或   (访问* p / 1 Systeme)或(CytoFLEX OR(cyto p / 0 flex))或(UniCel *   p / 1 DxH)OR((Coulter * p / 1 LH)OR Coulter LH))OR((Ortho p / 0   临床P / 1诊断)或VITROS OR(vitros p / 1系统*)或   (VITROS * p / 1 ECiQ)或ORTHOTM OR(orthotm p / 1 VISION)或(ORTHO p / 1   AutoVue *))OR((仪器p / 0实验室)或HemosIL或ACLTOP   或(ACL p / 0 ELITE)或(GEM * P / 1 Premier)或GEM OPL)或((辐射计)   接近/ 10(测定 OR测试* OR分析* OR 数组))或(AQT ?? p / 0 FLEX)   或(ABL ?? p / 0 FLEX)或HemoCue *)OR((Nova p / 0 Biomedical)或   StatStrip OR(STAT p / 0 PROFILE *)或((Nova p / 0 Biomedical)接近/ 1   Prime)或STATPROFILE *)或(((西门子p / 0医疗保健)近/ 10(化验*   或测试*或分析*或数组))或(ADVIA p / 0 Centaur)或(维度   p / 0 Vista)或RAPIDPOINT)))和(ud(> 20170101))(见附件)

     

所有ProQuest对话警报电子邮件均来自:alert@proquest.com。提示:使用此电子邮件地址设置过滤器并指导ProQuest   对话框提醒邮件到收件箱以外的文件夹。

这是我的脚本代码:

var messageBody = message.getPlainBody();
var ssFile = DriveApp.getFileById(id);
DriveApp.getFolderById(folder.getId()).addFile(ssFile);
var ss = SpreadsheetApp.open(ssFile);
var sheet = ss.getSheets()[0];
sheet.insertColumnAfter(sheet.getLastColumn());
SpreadsheetApp.flush();
var sheet = ss.getSheets()[0];
var range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn() + 1)
var values = range.getValues();
values[0][sheet.getLastColumn()] = "Search Strategy";
for (var i = 1; i < values.length; i++) {

var y = messageBody.match(/\((.*)\)/ig); //my regexp to extract the the text between ()
if (y)



   values[i][values[i].length - 1] = y.toString();
    }
range.setValues(values);

我预期的结果:

  

(ti,ab(((Abbott near / 10(化验* OR测试* OR分析* OR阵列))或   (Abbott p / 1 Point P / 1 Care)或ARCHITECT或(CELL p / 0 DYN))或((Alere)   接近/ 10(测定* OR测试* OR分析* OR阵列))或(Alere NEAR / 5(分类   P / 1系统))或INRatio或Afinion)或((Beckman * p / 1 Coulter near / 10   (化验* OR测试* OR分析* OR阵列))OR((Beckman * p / 0 Coulter)   接近/ 2 AU ????)或(UniCel * P / 1 DxC)或(UniCel * p / 1 DxI)或(Beckman *   接近/ 5访问)或(访问* p / 1 Systeme)或(CytoFLEX OR(cyto p / 0   flex))OR(UniCel * p / 1 DxH)OR((Coulter * p / 1 LH)OR CoulterLH))或   ((Ortho p / 0 Clinical P / 1 Diagnostics)或VITROS OR(vitros p / 1   系统*)或(VITROS * p / 1 ECiQ)或ORTHOTM OR(orthotm p / 1 VISION)或   (ORTHO p / 1 AutoVue *))或((仪器p / 0实验室)或   HemosIL或ACLTOP或(ACL p / 0 ELITE)或(GEM * P / 1 Premier)或GEMOPL)   或((辐射计接近/ 10(分析OR测试* OR分析* OR阵列))或(AQT ??   p / 0 FLEX)或(ABL ?? p / 0 FLEX)或HemoCue *)OR((Nova p / 0 Biomedical)   或StatStrip OR(STAT p / 0 PROFILE *)或((Nova p / 0 Biomedical)接近/ 1   Prime)或STATPROFILE *)或(((西门子p / 0医疗保健)近/ 10(化验*   或测试* OR分析* OR阵列))OR(ADVIA p / 0 Centaur)OR(尺寸p / 0   Vista)或RAPIDPOINT)))

错误的解析:

  

(史密斯杰克),(ti,ab(((雅培近/ 10(化验* OR测试* OR分析* OR)    array )),(雅培p / 1点P / 1护理)或ARCHITECT或(CELL p / 0 DYN)),(化验* OR测试* OR分析* OR 阵列)),(化验* OR测试* OR   分析* OR 数组))OR((Beckman * p / 0 Coulter),(UniCel * P / 1 DxC)或   (UniCel * p / 1 DxI),(Access * p / 1 Systeme)OR(CytoFLEX OR(cyto p / 0)   flex)),(Abbott p / 1 Point P / 1 Care),((Alere near / 10(化验* OR测试* OR)   分析*或数组)),(Alere NEAR / 5(分类P / 1系统))或INRatio OR   Afinion),(化验* OR测试* OR分析* OR 数组)),(UniCel * P / 1 DxC)或   (UniCel * p / 1 DxI),(Access * p / 1 Systeme),(UniCel * p / 1 DxH)或   ((Coulter * p / 1 LH)或Coulter LH)),((Ortho p / 0 Clinical P / 1   诊断)或VITROS OR(vitros p / 1系统*),(VITROS * p / 1 ECiQ)或   ORTHOTM OR(orthotm p / 1 VISION),((仪器p / 0   实验室),(ACL p / 0 ELITE)或(GEM * P / 1 Premier)或   GEM OPL),(测定 OR测试* OR分析* OR 数组))OR(AQT ?? p / 0   FLEX),((Nova p / 0 Biomedical),((Nova p / 0 Biomedical)near / 1 Prime)或   STATPROFILE *),(((西门子p / 0医疗保健)接近/ 10(化验* OR测试* OR   analy * OR array )),(ADVIA p / 0 Centaur)OR(Dimension p / 0 Vista)或   RAPIDPOINT))),(ud(&gt; 20170101))(见附件)

将非常感激地收到任何帮助

0 个答案:

没有答案