Der Martin: Frage zu JavaScript

Beitrag lesen

Hi,

Ne kurze Frage an alle die sich mit Regulären Ausdrücken in JavaScripten beschäftigen:

reguläre Ausdrücke (regular expressions) sind ein sprachenübergreifendes Konzept, es wäre also irreführend, das auf Javascript beschränkt zu sehen.

text1.txt
text2.txt
text_2.txt
text_1.txt

nun weiß ich das ich mit dem Filter [^2].txt alle Ergebnisse mit der ner 2 im Namen negieren kann.

Das stimmt nur halb. Der Ausdruck [^2].txt bedeutet:

  • ein beliebiges Zeichen außer der Ziffer 2
  • danach ein beliebiges Zeichen (der Punkt ist in RegEx das Jokerzeichen)
  • danach die Zeichenfolge "txt"

Der Ausdruck würde also auch auf "coffee2go.txt" passen, aber auch auf "abctxt".

Mein Ziel ist es aber nur Dateien mit text1.txt oder text2.txt

nicht aber Dateien mit Unterstrich auszuwählen.

Könnt ihr mir sagen, wie ich Dateien mit Unterstrich im Namen negiere.

Formuliere das bitte etwas präziser. Ich interpretiere mal: Du willst Namen finden, die mit ".txt" enden, davor eine Ziffer haben, aber keinen Unterstrich enthalten?

Wenn ja: Lass uns von vorn nach hinten durchgehen.

  • beliebig viele Zeichen, die kein Unterstrich sind: [^_]*
  • eine Ziffer (oder mehrere??): [0-9]+
  • die Zeichenfolge ".txt

Damit lautet der Ausdruck also: [^_]*[0-9]+\.txt

Der Stern bedeutet beliebig viele Vorkommen des vorangegangenen Elements; das Pluszeichen bedeutet beliebig viele, aber mindestens eins. Der Punkt steht normalerweise für "ein beliebiges Zeichen"; meint man ihn wörtlich, muss man ihn mit einem Backslash davor "escapen".

[^_*].txt hat zum Beispiel nicht funktioniert.

Was bedeutet denn das? "Finde ein beliebiges Zeichen außer Unterstrich und Stern, danach ein beliebiges Zeichen, danach die Zeichen "txt".

Gibt es eine Negation solcher Sonderzeichen oder kann man diese irgendwie - deklarieren mit eckigen Klammern oder so und anschließend negieren?

Ich würde dir empfehlen, dich mit RegEx etwas intensiver zu befassen. Das begegnet einem immer wieder. Nicht nur in Javascript, nicht nur in Programmiersprachen.

So long,
 Martin