如何提取位于两个(括号)或n个Bracklets

时间:2018-03-20 08:45:29

标签: javascript regex

我需要一个正则表达式或脚本代码来选择两个外括号之间的所有文本。

消息正文实例:一些文本(此处为文本(可能的文本)文本(可能的文本(更多文本)))结束文本

我想要的结果结果:(这里的文​​字(可能的文字)文字(可能的文字(更多文字)))

第二个例子:

  

(Jack Tomy)(史密斯)(ti,ab(((Abbott near / 10(化验* OR测试* OR分析*)   或数组))或(雅培p / 1点P / 1护理)或建筑或(CELL p / 0   DYN))OR((Alere接近/ 10(测定* OR测试* OR分析* OR 数组))或   (Alere NEAR / 5(Triage P / 1 System))或INRatio或Afinion)或   ((Beckman * p / 1 Coulter接近/ 10(测定* OR测试* OR分析* OR 数组))   或((Beckman * p / 0 Coulter)接近/ 2 AU ????)OR(UniCel * P / 1 DxC)或   (UniCel * p / 1 DxI)或(Beckman * near / 5 Access)或(Access * p / 1   Systeme)OR(CytoFLEX OR(cyto p / 0 flex))OR(UniCel * p / 1 DxH)OR   ((Coulter * p / 1 LH)或Coulter LH))OR((Ortho p / 0 Clinical P / 1)   诊断)或VITROS OR(vitros p / 1系统*)或(VITROS * p / 1 ECiQ)   或ORTHOTM OR(orthotm p / 1 VISION)或(ORTHO p / 1 AutoVue *))或   ((仪器p / 0实验室)或HemosIL或ACLTOP OR(ACL p / 0   ELITE)OR(GEM * P / 1 Premier)或GEM OPL)或((辐射计附近/ 10)   (测定 OR测试* 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 Healthcare)接近/ 10(测定* OR测试* OR分析* OR   数组))或(ADVIA p / 0 Centaur)或(Dimension p / 0 Vista)或RAPIDPOINT)))和(ud(> 20170101))(见附件)

同样的事我想从“()”中提取文本(Jack Tomy)(史密斯)(ti,ab((... ...我的输出杰克Tomy Smith ti,ab(....... 。)

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();
    }

我已经尝试了几个小时,我厌倦了很多例子,但都失败了。 将不胜感激地收到任何帮助。

非常感谢。

2 个答案:

答案 0 :(得分:1)

简单地match两个括号之间的所有内容:

&#13;
&#13;
const str = 'some text(text here(possible text)text(possible text(more text)))end text';
const match = str.match(/\((.*)\)/);
console.log(match[0])
&#13;
&#13;
&#13;

答案 1 :(得分:0)

&#13;
&#13;
var string = "some text(text here(possible text)text(possible text(more text)))end text";
console.log(string.match(/.*?(\(.*\))[^\)]*/)[1]);
&#13;
&#13;
&#13;