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
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