2017-09-17 12 views
1

J'utilise l'expression rationnelle suivante pour correspondre à des chaînes entre crochets:Regex pour correspondre à des chaînes figurant entre sans espaces autour

\((.*?)\) 

Mais cela correspond à ceci:

(word) 

et cela aussi:

(word) 

J'ai besoin de le modifier pour ne correspondre qu'au premier cas: les mots entre parenthèses sans espace: (word)

Des idées?

Merci à l'avance

+0

Qu'en est-'(mot1 mot2)', si cela était en correspondance? Que diriez-vous de '()', devrait-il être autorisé? – dasblinkenlight

+0

Oui à '(mot1 mot2)'. Non à juste '()'. – user1991185

Répondre

1

Utilisez lookahead/lookbehind pour interdire l'espace après la parenthèse d'ouverture et avant la parenthèse fermante:

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

(?!\s) et (?<!\s) signifie « non suivie/non précédé d'un espace ».

La partie située au milieu, [^()]+, nécessite la présence d'un ou de plusieurs caractères entre parenthèses, interdisant la correspondance ().

Demo.

+0

Il est à noter que javascript ne supporte pas lookbehind. Donc, en fonction de l'environnement, cela fonctionnera ou ne fonctionnera pas. –

2

Vous pouvez utiliser ce modèle:

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

[^\s()] assure que le premier caractère n'est pas un espace ou les supports (et rendre obligatoire au moins un caractère).

(?: [^()]* [^\s()])? est optionnel. si elle correspond, la même classe de caractères garantit que le dernier caractère n'est pas un espace.