159 votes

javascript regex - chercher derrière alternative?

Voici une regex qui fonctionne bien dans la plupart des regex implémentations:

(?<!filename)\.js$

Ce matchs .js pour une chaîne qui se termine par .js sauf pour filename.js

Javascript n'a pas de regex lookbehind. Quelqu'un est-il capable de mettre ensemble une alternative regex obtenir le même résultat et fonctionne en javascript?

Voici quelques réflexions, mais les besoins des fonctions d'assistance. J'espérais obtenir juste avec une regex: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

168voto

Tim Pietzcker Points 146308

Tu peux le faire:

 ^(?:(?!filename\.js$).)*\.js$
 

Cela fait explicitement ce que l'expression lookbehind fait implicitement: vérifiez chaque caractère de la chaîne si l'expression lookbehind plus l'expression régulière après sa correspondance ne correspond pas, puis autorisez uniquement la correspondance de ce caractère.

 ^                 # Start of string
(?:               # Try to match the following:
 (?!              # First assert that we can't match the following:
  filename\.js    # filename.js 
  $               # and end-of-string
 )                # End of negative lookahead
 .                # Match any character
)*                # Repeat as needed
\.js              # Match .js
$                 # End of string
 

68voto

^(?!filename).+\.js fonctionne pour moi

testé contre:

  • test.js match
  • blabla.js match
  • filename.js pas de match

Une bonne explication de cette expression peut être trouvé à l' expression Régulière correspondant de la chaîne ne contenant pas un mot?

Regarder de l'avant est disponible depuis la version 1.5 de javascript et est pris en charge par tous les principaux navigateurs

Mis à jour pour correspondre à filename2.js et 2filename.js mais pas filename.js

(^(?!filename\.js$).).+\.js

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X