我正在尝试提取字符串和可选括号的内容,但是我不知道如何处理可选括号:
lorem, ipsum
lorem ipsum
lorem, ipsum (X123),
lorem ipsum (X.12),
lorem ipsum (X.12),
lorem ipsum (X1)
我正在使用正则表达式/(.*)\((.*?)\)/gm
进行尝试,但这不会处理前两行。对于前两行,第二组的结果为空。
我也想摆脱文本结果的尾部空格。
第一组的预期结果应该是lorem ipsum
或lorem, ipsum
,第二组的预期结果应该是X123
/ X.12
/ X1
。
答案 0 :(得分:1)
答案 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));