Échapper les caractères spéciaux regex pour une correspondance littérale
Rendez n’importe quel texte sûr à insérer dans une expression régulière : invoice.total [draft]? devient invoice\.total \[draft\]\?, si bien que le point, les crochets et le point d’interrogation sont cherchés tels quels au lieu d’agir comme des instructions. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Un texte littéral ne peut pas toujours être inséré directement dans une expression régulière. Le point, le point d’interrogation, les crochets ou la barre oblique inverse sont des instructions de la syntaxe regex : une valeur non échappée peut donc reconnaître le mauvais texte, voire rendre le motif invalide. Cette capacité transforme une chaîne en fragment de motif ECMAScript qui traite littéralement chaque métacaractère regex. Elle convient aux termes de recherche, noms de fichiers, identifiants, libellés et autres valeurs fournies par des utilisateurs qui doivent intégrer une expression régulière sans changer de sens.
Transformez un texte littéral en fragment de motif sûr
Envoyez dans le champ text la valeur exacte que l’expression régulière doit reconnaître. Le résultat contient escaped, un fragment de motif dans lequel chaque métacaractère regex ECMAScript est précédé d’une barre oblique inverse. Les lettres, chiffres, espaces, signes de ponctuation sans fonction regex, sauts de ligne et caractères Unicode restent inchangés.
Par exemple, un point représente habituellement n’importe quel caractère dans une expression régulière, tandis qu’un point échappé désigne un véritable point. Les parenthèses créent généralement un groupe, les crochets ouvrent une classe de caractères, les accolades peuvent introduire un nombre de répétitions et les points d’interrogation ou astérisques contrôlent la répétition. Échapper ces symboles préserve le sens littéral de la valeur d’origine.
Le fragment renvoyé ne comprend ni délimiteurs obliques ni indicateurs : vous pouvez le transmettre directement au constructeur RegExp, l’insérer dans un motif plus vaste ou le conserver comme corps de motif. Une chaîne vide est valide et produit une valeur escaped vide, puisqu’aucun caractère n’est à transformer.
Associez la valeur échappée à une syntaxe regex volontaire
L’échappement est particulièrement utile lorsqu’une partie du motif provient de données et qu’une autre est volontairement écrite en syntaxe regex. Imaginons qu’une application doive trouver, au début d’une ligne, un code produit fourni par un utilisateur. Échappez d’abord le code, puis ajoutez l’ancre de début et la logique de délimitation voulue.
Cette séparation distingue clairement la structure fiable du motif et le contenu littéral. N’échappez pas le motif complet après l’avoir composé : vous neutraliseriez également les ancres, groupes, alternatives ou quantificateurs que vous vouliez garder actifs. La sortie vise un corps de motif ECMAScript, et non une notation de code source JavaScript.
Cette nuance est importante : les barres obliques n’ont pas de fonction spéciale pour le constructeur RegExp et sont donc conservées. Si vous placez le résultat dans un littéral regex délimité par des barres au sein d’un code JavaScript généré, l’échappement du délimiteur au niveau du code source constitue une étape distincte. Dans une application ordinaire, transmettez plutôt la chaîne échappée à new RegExp avec les indicateurs choisis séparément.
Comprenez la garantie et validez la conception globale
La transformation est déterministe et linéaire : elle parcourt la chaîne reçue et préfixe les caractères qui commandent la syntaxe des expressions régulières ECMAScript. Elle n’utilise pas le réseau, n’exécute pas l’expression obtenue, ne choisit aucun indicateur, n’ajoute aucune ancre et ne décide pas si la correspondance distingue les majuscules. Ces choix appartiennent à l’application, car ils modifient le comportement de recherche et non la sûreté littérale.
Chaque format possède ses propres règles d’échappement ; leur combinaison avec celles des regex exige d’appliquer chaque couche à la bonne frontière. Après composition, testez le motif complet sur des exemples positifs et négatifs représentatifs, surtout si vous ajoutez des parties facultatives ou des alternatives autour du fragment échappé.
Cas d’usage
Construire une recherche littérale
Convertissez un terme de recherche en fragment sûr pour regex avant d’ajouter volontairement ancres ou indicateurs.
Reconnaître fichiers et identifiants
Préservez points, crochets, parenthèses, signes plus et autres caractères syntaxiques dans des valeurs exactes.
Sécuriser la composition dynamique
Gardez littéral le texte fourni par des utilisateurs tandis que le code fiable définit la structure regex environnante.
Questions fréquentes
Quels caractères sont échappés ?
La sortie échappe la barre oblique inverse, l’accent circonflexe, le dollar, le point, la barre verticale, le point d’interrogation, l’astérisque, le signe plus, les parenthèses, les crochets et les accolades.
La sortie comprend-elle des délimiteurs regex ?
Non. La valeur échappée est un corps ou fragment de motif ECMAScript sans barres obliques délimitatrices.
Pourquoi la barre oblique n’est-elle pas échappée ?
Elle n’est pas spéciale dans un motif ECMAScript transmis au constructeur RegExp. Échapper un délimiteur regex du code source est une tâche distincte de la génération JavaScript.
Puis-je ajouter des ancres ou des indicateurs ?
Oui. Ajoutez volontairement la syntaxe regex autour du fragment échappé et fournissez séparément les indicateurs lors de la construction de l’expression complète.
Que devient une chaîne vide ?
Elle est acceptée et renvoie une valeur escaped vide, qui représente un littéral de longueur nulle.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev2/regex-special-char-escape \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"invoice.total (USD) [draft]?"}'const res = await fetch("https://api.kit.forhosting.com/dev2/regex-special-char-escape", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "invoice.total (USD) [draft]?"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/regex-special-char-escape",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "invoice.total (USD) [draft]?"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/regex-special-char-escape", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"invoice.total (USD) [draft]?"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"invoice.total (USD) [draft]?"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/regex-special-char-escape", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"text": "invoice.total (USD) [draft]?"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.regex_special_char_escape",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Comprenez la garantie et validez la conception globale
La capacité ne protège pas non plus une valeur pour un littéral de chaîne d’un langage, un document JSON, une commande shell, un attribut HTML ou une URL. Toute entrée autre qu’une chaîne est rejetée avec une erreur invalid_input au lieu d’être convertie, ce qui empêche nombres, tableaux, objets, null ou booléens de devenir silencieusement un texte inattendu. Les requêtes API utilisent le tarif de base publié de $0.002.
Questions techniques
Que se passe-t-il si text n’est pas une chaîne ?
La requête échoue avec une erreur invalid_input. Aucune conversion implicite des valeurs n’est effectuée.
Quel est le prix d’une requête API ?
Le tarif de base de l’API est de $0.002 par requête, et la même opération déterministe peut aussi s’exécuter dans le navigateur.