Testeur regex
Vérifiez un motif tel que votre navigateur l'exécutera : hello dans hello world donne une correspondance à la position 0, avec ses groupes numérotés et nommés. Passez en remplacement pour voir le résultat avant de toucher à de vraies données. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Motif
- hello
- Texte
- hello world
- Indicateurs
- Quantité
- 1
Besoin d’un testeur regex ECMAScript fiable pour motifs, captures et remplacements ? Cet outil utilise le même moteur que votre navigateur : drapeaux g, i, m, s, u et y, résultats de match avec groupes numérotés et nommés, et modèles de replace avec $$, $&, $n et $<name>.
Rechercher : chaque correspondance avec sa position et ses groupes
En mode recherche, chaque correspondance apparaît avec le texte trouvé, la position où elle commence, comptée comme dans les chaînes JavaScript, les groupes numérotés dans l'ordre de leur ouverture et les groupes nommés quand le motif en déclare. Sans le drapeau g, vous obtenez au plus une correspondance ; avec g, le moteur avance de correspondance en correspondance sans chevauchement. Les correspondances vides sont franchies sans risque, si bien qu'un motif ne tourne jamais en boucle. Avec le drapeau u, le point et les classes de caractères traitent un émoji comme un seul caractère et non comme deux unités.
Remplacer : le modèle de substitution
En mode remplacement s'applique la table de substitution standard de JavaScript : $$ devient un signe dollar littéral, $& insère la correspondance entière, un dollar suivi du numéro d'un groupe insère ce groupe, jusqu'à 99, et $<name> insère un groupe nommé. Si rien ne correspond, le résultat est le texte d'origine, inchangé, et le nombre de correspondances vaut zéro. Ce nombre est celui que donnerait le mode recherche pour le même motif et le même texte : vous savez combien de remplacements auront lieu avant de les appliquer.
Mode match et groupes de capture
En mode match la réponse liste chaque occurrence avec le match complet, l’index UTF-16 de début, les groupes numérotés et les groupes nommés optionnels. Sans drapeau global vous obtenez au plus un match ; avec g vous parcourez les matches non chevauchants ; sticky y doit correspondre à l’index courant et ne saute pas les espaces.
Modèles de replace
Sans match, le résultat égale le texte d’origine et count vaut zéro. Utilisez le même motif et les mêmes drapeaux que dans un éditeur pour aligner client et serveur.
Drapeaux, motifs invalides et limites
Seuls g, i, m, s, u et y sont acceptés, sans doublons. Avec u, le point opère sur des code points ; sans u, un emoji peut occuper deux unités UTF-16.
Cas d’usage
Déboguer avant la mise en production
Collez des journaux ou des saisies de formulaire et confirmez groupes et indices avant de déployer le regex.
Enseigner et documenter le regex
Montrez match et replace avec les mêmes règles ECMAScript qu’en JavaScript.
Cas limites sticky et global
Observez l’interaction de y et g avec espaces et matches vides sans deviner les bizarreries du navigateur.
Questions fréquentes
Quelle saveur de regex est utilisée ?
RegExp ECMAScript, le même moteur que les navigateurs modernes et Node. Ce n’est ni PCRE ni Python re.
Pourquoi n'obtiens-je qu'une seule correspondance ?
Sans le drapeau g, la recherche s'arrête à la première correspondance, comme une recherche simple en JavaScript. Avec g, le testeur parcourt toutes les correspondances du texte, sans chevauchement.
Comment réutiliser un groupe capturé dans le remplacement ?
Utilisez $& pour la correspondance entière, le signe dollar suivi du numéro du groupe pour un groupe numéroté et $<name> pour un groupe nommé. Écrivez $$ pour obtenir un signe dollar littéral.
Pourquoi le drapeau y s'arrête-t-il après le premier mot ?
Avec y, la correspondance doit commencer exactement là où la précédente s'est terminée, sans sauter d'espace ni d'autre caractère. Avec gy sur des mots séparés par des blancs, seul le premier mot ressort souvent.
Quelles sont les limites de taille ?
Le motif peut compter jusqu'à 1000 caractères et le texte jusqu'à 100 000 caractères. Une même analyse renvoie au plus 10 000 correspondances, ce qui évite de bloquer l'onglet du navigateur.
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/dev/regex-tester \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pattern":"\\w+","text":"hello world"}'const res = await fetch("https://api.kit.forhosting.com/dev/regex-tester", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pattern": "\\w+",
"text": "hello world"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/regex-tester",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pattern": "\\w+",
"text": "hello world"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/regex-tester", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pattern":"\\\\w+","text":"hello world"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pattern":"\\w+","text":"hello world"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/regex-tester", 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
{
"pattern": "\\w+",
"text": "hello world"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.regex_tester",
"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.
Limites
max_pattern_chars | 1000 |
max_text_chars | 100000 |
max_matches | 10000 |
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
Mode match et groupes de capture
Un groupe optionnel qui ne participe pas est renvoyé en null JSON afin que les emplacements restent stables pour les scripts.
Modèles de replace
Le mode replace suit la table ECMAScript : $$ devient un dollar littéral, $& est le match complet, $1–$99 sont des captures numérotées lorsqu’elles existent, et $<name> insère une capture nommée.
Drapeaux, motifs invalides et limites
Un motif invalide ne lève jamais une exception brute du moteur : vous recevez invalid_input typé avec un message clair. Les limites de longueur protègent l’onglet : motif jusqu’à 1000 caractères, texte jusqu’à 100000, et au plus 10000 matches par appel.
Cas d'intégration
Aperçu de remplacements
Essayez des modèles sur un court échantillon, puis appelez l’API avec le même contrat depuis un pipeline.
Questions techniques
Le testeur regex en ligne est-il gratuit ?
Oui. L’outil navigateur s’exécute localement sans frais. Les requêtes API utilisent le solde KIT prépayé au prix de base publié $0.002 ; les tâches en échec ne sont pas facturées.
Quels drapeaux sont pris en charge ?
g, i, m, s, u et y. Les autres drapeaux ou les doublons renvoient invalid_input.
Comment les groupes optionnels sont-ils renvoyés ?
En null dans le tableau groups (et dans named le cas échéant), jamais omis ni undefined en JSON.
Que se passe-t-il si le motif est invalide ?
Vous recevez invalid_input avec un message commençant par Regex inválida, pas une SyntaxError non typée.
Quelles sont les limites de taille ?
Motif ≤ 1000 caractères, texte ≤ 100000 caractères, au plus 10000 matches par requête.