首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个可选捕获组的Regex模式

多个可选捕获组的Regex模式
EN

Stack Overflow用户
提问于 2021-10-04 21:13:43
回答 1查看 80关注 0票数 1

我想从具有以下模式的文本中提取一些数据。

代码语言:javascript
复制
text1
text1|text2
text1|text2[text3]
text1|text2[text3] text4
(text1|text2[text3], text4)
text1[text3]
text1[text3], text4

到目前为止,我成功地构造了两个表达式,当第一个表达式失败时,它又回到了第二个表达式上。

/\(?([^|[]*)\|?([^[]*)\[?(.*)\],?\s?([^)]*)\)?/

/([^|]*)\|?(.*)/

也许有更好的方法来解析它。

是否有可能用一个正则表达式捕捉上面的所有内容?

谢谢你的帮助

示例

代码语言:javascript
复制
const items = [
"text1",
"text1|text2",
"text1|text2[text3]",
"text1|text2[text3] text4",
"(text1|text2[text3], text4)",
"text1[text3]",
"text1[text3], text4"
]

const parse = (text) => {

const [_, text1, text2, text3, text4] = /\(?([^|[]*)\|?([^[]*)\[?(.*)\],?\s?([^)]*)\)?/.exec(text)
|| /([^|]*)\|?(.*)/.exec(text)

  return {
    text1,
    text2,
    text3,
    text4
  };
}

for(const text of items) {
   console.log(parse(text));
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-04 21:33:11

您可以使用

代码语言:javascript
复制
const items = [
"text1",
"text1|text2",
"text1|text2[text3]",
"text1|text2[text3] text4",
"(text1|text2[text3], text4)",
"text1[text3]",
"text1[text3], text4"
]

const parse = (text) => {

const [_, text1, text2, text3, text4] = /^\(?([^[|]+)(?:\|([^[]+))?(?:\[([^\][]*)](?:\s*(?:,\s*)?([^\s)].*?))?)?\)?$/.exec(text)

  return {
    text1,
    text2,
    text3,
    text4
  };
}

for(const text of items) {
   console.log(text, parse(text));
}

regex演示。详细信息

  • ^ -字符串的开始
  • \(? -一个可选的)
  • ([^[|]+) -第1组:[|以外的一个或多个字符
  • (?:\|([^[]+))? -一个可选的|序列,然后是第2组:除[之外的任何一个或多个字符(尽可能多)
  • (?:\[([^\][]*)](?:\s*(?:,\s*)?([^\s)].*?))?)? -一个可选的序列
    • \[([^\][]*)] - [,除[] (捕获到第3组)以外的零个或多个字符,然后是一个]
    • (?:\s*(?:,\s*)?([^\s)].*?))? -一个可选的序列
      • \s* -零或更多空格字符
      • (?:,\s*)? -一个可选的,序列和零或多个空格字符
      • ([^\s)].*?) -第4组:除空格和)之外的字符,然后除行中断字符以外的零或多个字符,尽可能少。

  • \)? -一个可选的)
  • $ -字符串的末端。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69442458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档