Zoeken…


Opmerkingen

Niet alles dat begint met een backslash is een escape-reeks. Veel tekens zijn gewoon niet handig om te ontsnappen aan reeksen en zullen er gewoon voor zorgen dat een voorafgaande backslash wordt genegeerd.

"\H\e\l\l\o" === "Hello" // true

Aan de andere kant zullen sommige tekens zoals "u" en "x" een syntaxisfout veroorzaken bij onjuist gebruik na een backslash. Het volgende is geen geldige tekenreeks letterlijk omdat het het Unicode escape-voorvoegsel \u gevolgd door een teken dat geen geldig hexadecimaal cijfer of accolade is:

"C:\Windows\System32\updatehandlers.dll" // SyntaxError

Een backslash aan het einde van een regel in een string introduceert geen escape-reeks, maar geeft de lijnvervolging aan, dwz

"contin\
uation" === "continuation" // true

Gelijkenis met andere formaten

Hoewel ontsnappingsreeksen in JavaScript lijken op andere talen en formaten, zoals C ++, Java, JSON, enz., Zijn er vaak kritische verschillen in de details. Test bij twijfel of uw code zich gedraagt zoals verwacht en overweeg de taalspecificatie te controleren.

Speciale tekens invoeren in tekenreeksen en reguliere expressies

De meeste afdrukbare tekens kunnen worden opgenomen in letterlijke tekenreeksen of reguliere uitdrukkingen zoals ze zijn, bijv

var str = "ポケモン"; // a valid string
var regExp = /[Α-Ωα-ω]/; // matches any Greek letter without diacritics

Om willekeurige tekens aan een string of reguliere expressie toe te voegen, inclusief niet-afdrukbare tekens, moet je escape-reeksen gebruiken . Escape-reeksen bestaan uit een backslash ("\") gevolgd door een of meer andere tekens. Om een escape-reeks voor een bepaald teken te schrijven, moet men meestal (maar niet altijd) de hexadecimale tekencode kennen.

JavaScript biedt een aantal verschillende manieren om escape-reeksen op te geven, zoals gedocumenteerd in de voorbeelden in dit onderwerp. De volgende escape-reeksen geven bijvoorbeeld allemaal hetzelfde teken aan: de regelinvoer (Unix newline-teken), met tekencode U + 000A.

  • \n
  • \x0a
  • \u000a
  • \u{a} nieuw in ES6, alleen in tekenreeksen
  • \012 verboden in string literals in strict mode en in template strings
  • \cj alleen in reguliere expressies

Escape-reekstypen

Escape-reeksen met één teken

Sommige escape-reeksen bestaan uit een backslash gevolgd door een enkel karakter.

Bijvoorbeeld in alert("Hello\nWorld"); , wordt de escape-reeks \n gebruikt om een nieuwe regel in de tekenreeksparameter in te voeren, zodat de woorden "Hallo" en "Wereld" in opeenvolgende regels worden weergegeven.

Escape-reeks Karakter Unicode
\b (alleen in tekenreeksen, niet in reguliere expressies) backspace U + 0008
\t horizontale tab U + 0009
\n lijn feed U + 000A
\v verticale tab U + 000B
\f formulier feed U + 000C
\r vervoer terug U + 000d

Bovendien kan de reeks \0 , indien niet gevolgd door een cijfer tussen 0 en 7, worden gebruikt om aan het nul-teken (U + 0000) te ontsnappen.

De reeksen \\ , \' en \" worden gebruikt om te ontsnappen aan het teken dat volgt op de backslash. Hoewel ze vergelijkbaar zijn met niet-escape-reeksen, waarbij de leidende backslash eenvoudig wordt genegeerd (bijv. \? Voor ? ), Worden ze expliciet behandeld als single karakter-escape-reeksen in tekenreeksen volgens de specificatie.

Hexadecimale ontsnappingsreeksen

Tekens met codes tussen 0 en 255 kunnen worden weergegeven met een escape-reeks waarbij \x wordt gevolgd door de 2-cijferige hexadecimale tekencode. Het niet-afbrekende \xa0 heeft bijvoorbeeld code 160 of A0 in basis 16 en kan dus worden geschreven als \xa0 .

var str = "ONE\xa0LINE"; // ONE and LINE with a non-breaking space between them

Voor hex cijfers boven 9 worden de letters a tot f zonder hoofdletters of kleine letters gebruikt.

var regExp1 = /[\x00-xff]/; // matches any character between U+0000 and U+00FF
var regExp2 = /[\x00-xFF]/; // same as above

4-cijferige Unicode-escape-reeksen

Tekens met codes tussen 0 en 65535 (2 16 - 1) kunnen worden weergegeven met een escape-reeks waarbij \u wordt gevolgd door de 4-cijferige hexadecimale tekencode.

De Unicode-standaard definieert bijvoorbeeld het rechterpijlteken ("→") met het nummer 8594 of 2192 in hexadecimaal formaat. Dus een escape-reeks daarvoor zou \u2192 .

Dit levert de string "A → B" op:

var str = "A \u2192 B";

Voor hex cijfers boven de 9 worden de letters a tot f zonder hoofdletters of kleine letters gebruikt. Hexadecimale codes korter dan 4 cijfers moeten worden \u007A met nullen: \u007A voor de kleine letter "z".

Curly bracket Unicode-escape-reeksen

6

ES6 breidt Unicode-ondersteuning uit naar het volledige codebereik van 0 tot 0x10FFFF. Om tekens met code groter dan 2 16 - 1 te laten ontsnappen, is een nieuwe syntaxis voor ontsnappingsreeksen geïntroduceerd:

\u{???}

Waar de code tussen accolades hexadecimale weergave van de codepuntwaarde is, bijv

alert("Look! \u{1f440}"); // Look! 👀

In het bovenstaande voorbeeld is de code 1f440 de hexadecimale weergave van de tekencode van de Unicode Character Eyes .

Merk op dat de code tussen accolades een willekeurig aantal hexadecimale cijfers mag bevatten, zolang de waarde niet groter is dan 0x10FFFF. Voor hex cijfers boven 9 worden de letters a tot f zonder hoofdletters of kleine letters gebruikt.

Unicode-escape-reeksen met accolades werken alleen binnen tekenreeksen, niet binnen reguliere expressies!

Octaal ontsnappingssequenties

Octale escape-reeksen zijn verouderd vanaf ES5, maar worden nog steeds ondersteund in reguliere expressies en in niet-strikte modus ook in niet-sjabloonreeksen. Een octale escape-reeks bestaat uit een, twee of drie octale cijfers, met een waarde tussen 0 en 377 8 = 255.

De hoofdletter "E" heeft bijvoorbeeld tekencode 69 of 105 in basis 8. Dus deze kan worden weergegeven met de escape-reeks \105 :

/\105scape/.test("Fun with Escape Sequences"); // true

In de strikte modus zijn octale escape-reeksen niet toegestaan binnen strings en produceren ze een syntaxisfout. Het is de moeite waard om op te merken dat \0 , in tegenstelling tot \00 of \000 , niet als een octale escape-reeks wordt beschouwd en dus nog steeds binnen strings (zelfs sjabloonstrings) in strikte modus is toegestaan.

Controle ontsnappingsreeksen

Sommige escape-reeksen worden alleen herkend in literaire reguliere expressie (niet in tekenreeksen). Deze kunnen worden gebruikt om tekens met codes tussen 1 en 26 (U + 0001 – U + 001A) te omzeilen. Ze bestaan uit een enkele letter AZ (hoofdletter maakt geen verschil) voorafgegaan door \c . De alfabetische positie van de letter na \c bepaalt de tekencode.

Bijvoorbeeld in de reguliere expressie

`/\cG/`

De letter "G" (de 7e letter in het alfabet) verwijst naar het teken U + 0007, en dus

`/\cG`/.test(String.fromCharCode(7)); // true


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow