如何在正则表达式中处理可选组并删除结果的尾随空格

时间:2019-07-09 19:07:11

标签: javascript regex

我正在尝试提取字符串和可选括号的内容,但是我不知道如何处理可选括号:

lorem, ipsum
lorem ipsum
lorem, ipsum (X123), 
lorem ipsum (X.12), 
lorem ipsum    (X.12), 
lorem ipsum (X1)

我正在使用正则表达式/(.*)\((.*?)\)/gm进行尝试,但这不会处理前两行。对于前两行,第二组的结果为空。 我也想摆脱文本结果的尾部空格。

第一组的预期结果应该是lorem ipsumlorem, ipsum,第二组的预期结果应该是X123 / X.12 / X1

https://regex101.com/r/ZcCLCL/2

2 个答案:

答案 0 :(得分:1)

我的猜测是该表达式或该表达式的修改版本

^([^(]*?)$|^([^(]*)((?:\(([^)]*?)\))?)

可能会工作。

DEMO

答案 1 :(得分:1)

您可以使用正则表达式/^(.+?)\s*(?:\((.+?)\))?[,\s]*$/

说明:

^   beginning of line
 (.+?)   lazily capture one or more characters
      \s*   zero or more spaces
         (?:   begin unnamed capturing group
            \(   literal parenthesis
              (.+?)   lazily capture one or more of any character
                   \)   literal parenthesis
                     )?   end unnamed capturing group and make it optional
                       [,\s]*   zero or more spaces or commas
                             $   end of line

const pattern = /^(.+?)\s*(?:\((.+?)\))?[,\s]*$/gm;

const s= `lorem, ipsum
lorem ipsum
lorem, ipsum (X123), 
lorem ipsum (X.12), 
lorem ipsum    (X.12), 
lorem ipsum (X1)`;

for (let m; m = pattern.exec(s); console.log(m));