Javascript 使用命名的正则表达式组输出匹配数组

Javascript 使用命名的正则表达式组输出匹配数组,javascript,regex,Javascript,Regex,我正试图掌握命名捕获组的诀窍 给一串 var a = '{hello} good {sir}, a [great] sunny [day] to you.'; 我想输出一个数组来保持句子的完整性(包括标点、空格等),这样我可以在以后重新组合句子: [ { group: "braces", word: "hello" }, { group: "other", word: " good

我正试图掌握命名捕获组的诀窍

给一串

var a = '{hello} good {sir}, a [great] sunny [day] to you.';
我想输出一个数组来保持句子的完整性(包括标点、空格等),这样我可以在以后重新组合句子:

[
  {
    group: "braces",
    word: "hello"
  },
  {
    group: "other",
    word: " good " <-- space on either side is maintained
  },
  {
    group: "braces",
    word: "sir"
  },
  {
    group: "other",
    word: ", a "
  },
  {
    group: "brackets",
    word:  "great"
  },
  {
    group: "other",
    word: " sunny "
  },
  {
    group: "brackets",
    word: "day"
  },
  {
    group: "other",
    word:  " to you."
  },
]
console.log(a.match(regex))不输出任何内容

如果我删除

var regex = /(?<braces>\{(.*?)\})(?<brackets>\[(.*?)\])?/g;
var regex=/(?\{(.*?\})(?\[(.*?\]))?/g;
console.log(a.match(regex))输出<代码>[“{hello}”、“{sir}”]


问题:如何使用捕获组查找命名组的所有实例,并像上面所需的数组一样输出它们?

对于给定的命名捕获组,正则表达式匹配对象将只包含一个字符串。对于您尝试执行的操作,您必须分两步执行:首先分离出输入的部分,然后将其映射到对象数组,同时检查捕获的组以确定它需要的
组的排序:

const str='{你好}好{先生},祝你[非常]晴朗[一天];
常量匹配=[…str.matchAll(/{([^{]+)}\[([^\]]+)\]\]\]|([^[{]+)/g)]
.map(匹配=>({
组:匹配[1]?“括号”:匹配[2]?“括号”:“其他”,
单词:match[1]| | match[2]| | match[3]
}));
console.log(匹配);
var regex = /(?<braces>\{(.*?)\})(?<brackets>\[(.*?)\])?/g;