Unterschied Schreibweise?
bearbeitet von
Tach!
> Ich habe das String Literal mit einfachem Hochkomma versehen und alle überflüssingen \ entfernt.
> Damit der Backslash erkannt wird braucht man wirklich 4 \ bzw 3. Nur so kommt die Alert Meldung.
> Aber ich dachte eigentlich einer müsste doch reichen?
Nein, weil der bereits vom String-Literal vereinnahmt wird. Da kommt dann nur noch ein / beim Regex an. Du willst aber / und \ prüfen.
Vielleicht wird es etwas deutlicher, wenn wir mal den / an eine andere Stelle setzen.
`RegExp('[\\:*?"<>|/]');`
Zwei `\\` werden benötigt, um ein einzelnes wörtliches \ in einem String-Literal darzustellen. Der Regexp bekommt daraufhin \: und denkt sich, dass das ein maskierter : ist und weg war der verbliebene \. Deswegen brauchte es doppelt so viele, damit das Stringliteral seinen Teil bekommt und für den Regex noch genügend übrigbleiben.
> ~~~js
> new RegExp('[\\\\/:*?"<>|]');
> if(!fname.match(rexp))
> ~~~
Aus zwei geschachtelten Kontexten mach ich mal nur einen und außerdem ist wieder der / ans Ende gewandert.
~~~js
if(!fname.match(/[\\:*?"<>|\/]/))
~~~
Zwei Backslashes braucht es, damit einer wörtlich übrigbleibt und nicht `\:` als maskiertes : gewertet wird. Den \ vor dem / braucht es, damit der / nicht als Regex-Ende erkannt wird.
dedlfix.