Maison > interface Web > js tutoriel > le corps du texte

Comment faire correspondre les instances Regex en dehors des chaînes entre guillemets, même avec des guillemets échappés ?

DDD
Libérer: 2024-10-28 00:02:01
original
880 Les gens l'ont consulté

How to Match Regex Instances Outside of Quoted Strings, Even with Escaped Quotes?

Faire correspondre les instances en dehors des guillemets

Contrairement aux hypothèses précédentes, il est possible de faire correspondre toutes les instances d'une expression régulière donnée qui ne sont pas entre guillemets parties d'une chaîne utilisant des expressions régulières, prenant même en compte les guillemets échappés.

Solution Regex

Pour y parvenir, utilisez une assertion anticipée qui vérifie si chaque mot est en dehors des guillemets, ce qui se produit lorsqu'un nombre pair de guillemets le suit. L'expression régulière ci-dessous capture ce modèle :

\+(?=([^"]*"[^"]*")*[^"]*$)
Copier après la connexion

Gestion des guillemets échappés

Pour gérer les guillemets échappés, modifiez l'expression pour ignorer les barres obliques inverses et passer à la citation suivante sans échappement. :

\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)
Copier après la connexion

Cela garantit que les guillemets échappés ne sont pas comptés comme des guillemets d'ouverture.

Utilisation de JavaScript avec .split() et .replace()

Pour une utilisation avec les méthodes .split() et .replace() de JavaScript, le code suivant peut être utilisé :

const input = '+bar+baz"not+or\"+or+\"this+\"foo+bar+';
const replaced = input.replace(/\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)/g, '#');
console.log(replaced); // "#bar#baz\"not+or\"+or+\"this+\"foo#bar#"
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal