正则表达式匹配括号内的字符串没有空格周围

问题描述:

我使用正则表达式如下匹配括号内的字符串:正则表达式匹配括号内的字符串没有空格周围

\((.*?)\) 

但是,这符合这样的:

(word) 

这也太:

(word) 

我需要修改它只匹配第一种情况:括号内没有空格的词:(word)

任何想法?

在此先感谢

+0

什么'(字词字词2)',这应该匹配? '()'怎么样,应该允许吗? – dasblinkenlight

+0

对'(word1 word2)'有效。不要只是'()'。 – user1991185

使用lookahead/lookbehind左括号后和右括号前禁止空间:

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

(?!\s)(?<!\s)意味着“不跟/不前面有一个空格”。

中间的部分[^()]+要求在圆括号之间存在一个或多个字符,不允许有()匹配。

Demo.

+0

值得注意的是,javascript不支持lookbehind。所以取决于环境,这将会或不会工作。 –

可以使用此图案:

\([^\s()](?:[^()]*[^\s()])?\) 

[^\s()]确保第一字符不是空格或括号(和使强制至少一个字符)。

(?: [^()]* [^\s()])?是可选的。如果匹配,相同的字符类可确保最后一个字符不是空格。

Word Boundaries

\(\b[^)]+\b\)