【问题标题】:Javascript regex: How to avoid a capturing group becoming "undefined"?Javascript 正则表达式:如何避免捕获组成为“未定义”?
【发布时间】:2021-01-12 18:10:34
【问题描述】:

如果我想捕捉例如圆括号或方括号中的文本并使用此正则表达式:

\[(.+)\]|\((.+)\)

对于示例“[test]”,我得到结果“test”和“undefined”,对于“(test)”,得到结果“undefined”和“test”。 我怎样才能设法只得到“测试”作为结果?

(这个正则表达式只是一个例子,我的实际正则表达式更复杂但有同样的问题。)

【问题讨论】:

  • stackoverflow.com/q/5367369/2864740 - 命名捕获组(仅限 2018 年以上!),或后期操作。
  • 如果没有分支重置功能,您所能做的就是从结果中删除未定义的值。

标签: javascript regex capturing-group


【解决方案1】:

如果捕获的特定组号无关紧要,只是它们包含的文本,我认为最简单的方法是在之后过滤匹配以删除未定义的组:

for (const match of ' [foo] (bar) '.matchAll(/\[(.+)\]|\((.+)\)/g)) {
  const [, text] = match.filter(m => m !== undefined);
  console.log(text);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多