Maison >interface Web >js tutoriel >Comment faire correspondre les instances Regex en dehors des chaînes entre guillemets, même avec des guillemets échappés ?

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

DDD
DDDoriginal
2024-10-28 00:02:01900parcourir

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 :

\+(?=([^"]*"[^"]*")*[^"]*$)

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

\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)

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

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!

Déclaration:
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