Regex 正则表达式以匹配两个字符之间的任意位置的某些字符

Regex 正则表达式以匹配两个字符之间的任意位置的某些字符,regex,Regex,我想检测(并返回)括号内的任何标点符号。我正在查看的文本行将有多组括号(我可以假设这些括号格式正确)。考虑到这样的情况: [abc.] [!bc]. [.e.g] [hi] 我想检测所有这些案例,并返回类似于[[.]、[!]、[…]]的内容 我试图执行/{.*([,!?]+).*?}/g,但对于我不想匹配的[hello],[hi]它返回true 我在用JS 您可以在方括号中匹配子字符串,然后删除所有非标点符号的字符: const text='[abc.][!bc]。[.e.g]'; cons

我想检测(并返回)括号内的任何标点符号。我正在查看的文本行将有多组括号(我可以假设这些括号格式正确)。考虑到这样的情况:

[abc.] [!bc]. [.e.g] [hi]
我想检测所有这些案例,并返回类似于
[[.]、[!]、[…]]
的内容

我试图执行
/{.*([,!?]+).*?}/g
,但对于我不想匹配的
[hello],[hi]
它返回true


我在用JS

您可以在方括号中匹配子字符串,然后删除所有非标点符号的字符:

const text='[abc.][!bc]。[.e.g]';
const matches=text.match(/\[([^\][]*])]/g.map(x=>`[${x.replace(/[^,,?!]/g,,)}]`)

console.log(匹配项)酷,谢谢!我只想返回每个[]的标点符号(如果有),不一定要将每个带括号的部分映射到包含其标点符号的数组(对不起,我的帖子不清楚!)。我知道我可以过滤掉空数组,但是我可以用正则表达式搜索括号内的标点符号,然后返回匹配组(如果有)吗?@www您仍然需要应用后处理步骤,因为您无法同时匹配和跳过字符。为了避免在没有标点的情况下匹配括号内的子字符串,请使用
/\[([^\][,?!]*[,?!][^\][]*]/g
/\[([^\][\p{p}\p{S}]*[\p{p}\p{S}][^\]]]\]//gu!为什么我需要在第一个被否定的字符类中包含标点符号?i、 e.为什么不
/\[([^\][]*[,?!][^\][]*])]/g
@www让它工作得更快呢。