正则表达式匹配包含(或不包含)空格的括号内的字符串

regex Match string inside brackets which includes (or not includes) spaces

如何使用正则表达式捕获字符串,即 a) 在圆括号内,包括括号,b) 包含 space(或者 在括号内包含一个 space) ,这样可以捕获 (test test), ( test), (test ) 但不捕获 (test).

我发现了一个类似的问题,它使用表达式

\((?!\s)[^()]+(?<!\s)\)

但使用此 lookahead/lookbehind 规则仅查找附加到括号的 space。您如何修改它以查找括号内的每个 space?

提前致谢!

您可以使用 /\([^)]* [^)]*\)/。这匹配 0 个或多个非右括号字符后跟 space 后跟 0 个或多个非右括号字符。所以它将匹配 "( )""( )" 但不匹配 "()".

const s = "() ( test) (test) (test ) (    ) ( ) ( test ) (t est)";
console.log([...s.matchAll(/\([^)]* [^)]*\)/g)]);

简单地 \([^()]+\) 匹配一对括号之间的所有内容。这包括 spaces,以及除(换行符或)括号之外的任何其他字符。

(假设正则表达式方言需要转义文字括号,加号匹配一次或多次重复。否定字符 class 是否匹配换行符也是特定于方言的。)

如果(正如您在评论中所说)您至少需要一个 space,那很容易添加。换句话说:匹配一个左括号字符,零个或多个非 space,非括号字符,一个 space,零个或多个非括号字符(space 也可以)直到右括号。

\([^ ()]* [^())*\)