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;