我正在尝试提取字符串和可选括号的内容,但我不知道如何处理可选括号:
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
对于第二组。
最佳答案
您可以使用正则表达式 /^(.+?)\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));
关于javascript - 如何处理正则表达式中的可选组并删除结果的尾随空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56959162/