2017-07-03 3 views
1

Mon modèle actuel est:Regex pour exclure un motif dans le nom de fichier

/\.(scss|js|jsx)$/ 

Je veux exclure des fichiers qui se terminent par "-test.js"

J'ai essayé:

/(?!-test)\.(scss|js|jsx)$/ 

mais ça ne marche pas.

+0

Quelle langue/environnement vous en cours d'exécution dans ce modèle? Pouvez-vous offrir quelques exemples d'intrants et votre résultat attendu pour chacun? Veuillez poster votre implémentation regex spécifique à votre langue. – mickmackusa

+0

javascript, le nom de fichier blabla.js doit correspondre, blabla-test.js ne doit pas correspondre. tout avec .scss et .jsx devrait correspondre. utilisé pour config webpack – jeff

Répondre

0

Essayez celui-ci:

/^([a-z0-9-_](?!-test\.))+\.(scss|js|jsx)$/ 

Aucun des caractères du nom du fichier doit être suivi par -test..

+0

Je viens de le réparer. – Adam

1

js|jsx peut être raffiné/accéléré en utilisant: jsx?.
scss peut être accéléré en utilisant scs{2}.
En mettant des "alternatives" plus courtes avant les plus longues, vous améliorerez la vitesse. (jsx?|scs{2})

Motifs:

/^(.(?!-test\.js$))+\.(jsx?|scs{2})$/ 

ou dans près de la moitié des étapes, du fait de groupe de capture enlevé:

/^(?!.*-test\.js$).*\.(jsx?|scs{2})$/ 

Demo

cas de test:

a-test.js  #fail 
b-test.scss #pass 
c-test.jsx  #pass 
d.js   #pass 
e.scss   #pass 
f.jsx   #pass 
g-testg.js  #pass 
h-testh.scss #pass 
i-testi.jsx #pass 
2

Comme JS ne prend pas en charge lookbehind, vous pouvez faire ^(?!.*-test\.js$).*\.(js|scss|jsx)$ comme solution de contournement.

Regex Demo

var testFiles = ['p-test.js', 
 
    'q-test.scss', 
 
    'r-test.jsx', 
 
    'p.js', 
 
    'q.scss', 
 
    'r.jsx', 
 
    'sadadf-testddd.js' 
 
]; 
 
var myRegexp = /^(?!.*-test\.js$).*\.(js|scss|jsx)$/g; 
 
testFiles.forEach(function(file) { 
 
    var match = file.match(myRegexp) 
 
    console.log(file + " : " + (match ? 'matches' : 'does not match')); 
 
})

+0

thx cela fonctionne, mais pas parfaitement: l'antipattern exact devrait être "* -test.js", donc pas d'espace d'autres caractères entre "test" et ".js" et le moins fait partie du motif https: // regex101 .com/r/upQVte/4 – jeff

+0

@jeff Désolé à ce sujet. Mise à jour ma réponse juste au cas où. – Piyush

+0

merci, "sadadf-testddd.js" est toujours un mauvais négatif – jeff