首页 > 解决方案 > 正则表达式捕获开方括号和右方括号之间的内容

问题描述

我正在尝试构建一个正则表达式来捕获方括号之间的任何内容,例如以下数字。

[phone]010101[/phone] [phone]434343[/phone] [phone]3443434[/phone]

所以匹配应该是 010101, 434343, 3443434

cow([\s\S]*?)milk进行了实验,这似乎可以捕获多个匹配项,并且可以与多行一起正常工作,从而实现了我真正需要的。

但是,当我尝试使用 this: 构建实际的正则表达式时\[phone\]([\s\S]*?)\[\/phone\],它只会捕获第一个匹配项。

我的表达可能有什么问题?

标签: regexstring

解决方案


正则表达式是正确的,但缺少全局和多行标志。在 JavaScript 中,通过向正则表达式添加g(全局)和m(多行)标志,可以找到预期的匹配项。

str=`[phone]010101[/phone] [phone]434343[/phone]
[phone]3443434[/phone]`;
reg = /\[phone\]([\s\S]*?)\[\/phone\]/gm;
[...str.matchAll(reg)].map(x=> x[1]); //["010101", "434343", "3443434"]

推荐阅读