3 Stimmen

Jshint nicht maskierte Zeichen in regulärem Ausdruck

Ich versuche, etwas Javascript-Code mit jshint aufzuräumen. In einem verwendeten Script von Drittanbietern beschwert sich jshint über nicht entkommenes Javascript in dieser Zeile:

var cleanString = deaccentedString.replace(/([|()[{.+*?^$\\])/g,"\\$1");

Ich würde auch gerne verstehen, was dieser reguläre Ausdruck macht, aber ich sehe es nicht. Kann mir jemand sagen, wofür das ist und wie man es aufgeräumter schreiben kann?

Vielen Dank für jegliche Hinweise.

5voto

Tim Pietzcker Punkte 311448

Es entspricht einem der folgenden Zeichen: |()[{.+*?^$\ und ersetzt es durch sein maskiertes Gegenstück (Backslash plus dieses Zeichen).

Obwohl es in vielen Regex-Dialekten legal ist, ein unmaskiertes [ innerhalb einer Zeichenklasse zu verwenden, kann es in anderen einen Fehler auslösen, also versuchen Sie dies:

var saubererString = deakzentuierterString.replace(/[|()\[{.+*?^$\\]/g,"\\$0");

(die unnötige Erfassungsgruppe könnte auch weggelassen werden.)

3voto

Pointy Punkte 387467

Der Regex wählt "spezielle" Zeichen aus und fügt einen Backslash vor. Meine Vermutung ist, dass er das nackte "[" in der Zeichenklasse nicht mag, aber das ist nur eine Vermutung. Du könntest versuchen:

var cleanString = deaccentedString.replace(/([|()\[{.+*?^$\\])/g,"\\$1");

Eine andere Option, die du hast, ist einfach nicht auf das zu achten, was jshint sagt; es ist schließlich nur ein Beratungswerkzeug und wenn der Code tatsächlich in allen Browsern ordnungsgemäß funktioniert, ist der Rat offensichtlich schlecht :-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X