2010-03-16 5 views

Répondre

12

le point attrape tout sauf .. nouvelles lignes (si le dotall est faux)

donc soit utiliser le dotall (comme mentionné dans d'autres réponses/commentaires ce ne sont pas pris en charge en javascript, mais je laisser ici pour référence)

/\/\*(.*)\*\//gs 

ou ajouter les caractères blancs \s dans vos expressions

/\/\*((\s|.)*?)\*\//g 

Alan a mentionné dans son commentaire une mauvaise performance de la réponse je lui ai donné donc utiliser les éléments suivants à la place .. (qui se traduit par tout les espaces et tout non des espaces, donc tout ..)

/\/\*([\s\S]*?)\*\//g 
+0

Il n'y a pas le mode 'de s' (monoligne) en JavaScript, et' (. \ S |) 'tribunaux retours en arrière catastrophique. La méthode standard pour faire correspondre n'importe quoi, y compris les sauts de ligne dans JS est '[\ S \ s]'. –

+0

@alan, des liens sur le backtracking '\ s | .' aimerait en savoir plus à ce sujet .. –

+1

Erik Corry l'a bien expliqué ici: http://stackoverflow.com/questions/2407870/javascript-regex-hangs-using-v8/2408599#2408599 Pour une discussion plus générale sur le retour en arrière catastrophique , voir http://www.regular-expressions.info/catastrophic.html –

4

Deux problèmes:

  1. en javascript, il n'y a pas de modificateur de dotall. Vous devrez utiliser un hack pour autoriser les retours à la ligne correspondants, par exemple en utilisant [^].
  2. Vous utilisez la correspondance gloutonne. S'il y a plusieurs commentaires dans votre entrée, tout ce qui se passe entre eux sera mangé.

Solution:

/\/\*[^]*?\*\//g 

Exemple:

> '/*abc\ncde*/qqq/*iop\n\njj*/'.replace(/\/\*[^]*?\*\//g, '') 
qqq 
+1

+1, modifié pour ne pas être gourmand .. –

+0

Ne fonctionne pas avec les commentaires imbriqués. Essayez: '/ * abc/* xyz */def/*'. La nature non-gourmande le fait correspondre au 1er commentaire de début avec le commentaire de la 1ère fin, et il ne reste plus que 'def '. – InfinitiesLoop

+0

Les commentaires imbriqués ne sont jamais autorisés de cette façon. L'intérieur fermera l'extérieur. – InfinitiesLoop

Questions connexes