Maison >interface Web >js tutoriel >Comment puis-je implémenter un lookbehind négatif dans JavaScript Regex ?

Comment puis-je implémenter un lookbehind négatif dans JavaScript Regex ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-19 06:53:13449parcourir

How Can I Implement Negative Lookbehind in JavaScript Regex?

Comment implémenter un lookbehind négatif en JavaScript

JavaScript ne prend pas en charge nativement les lookbehinds négatifs, ce qui entrave la création d'expressions régulières qui correspondent à des chaînes qui ne commencez pas par des caractères spécifiques.

Solution avec les assertions Lookbehind (après 2018)

En 2018, JavaScript a introduit les assertions lookbehind, permettant des lookbehind positifs et négatifs :

  • lookbehind positif : (? <=...)
  • Négatif lookbehind : (?

Par exemple, l'expression régulière suivante correspond au caractère 'm' dans 'jim' ou 'm', mais pas dans 'jam' :

(?<!([abcdefg]))m

Solution Pré-2018

Avant En 2018, une solution de contournement impliquait d'inverser la chaîne d'entrée, de faire correspondre une expression régulière inversée, puis d'inverser les correspondances. Ce processus peut être mis en œuvre de la manière suivante :

const reverse = s => s.split('').reverse().join('');

const test = (stringToTests, reversedRegexp) => stringToTests
  .map(reverse)
  .forEach((s,i) => {
    const match = reversedRegexp.test(s);
    console.log(stringToTests[i], match, 'token:', match ? reverse(reversedRegexp.exec(s)[0]) : 'Ø');
  });<p><strong>Exemples</strong></p>
<p>Pour illustrer son utilisation :</p>
<ul><li>Pour la question initiale mentionnée dans le contexte, l'expression régulière suivante correspondrait à 'm' dans 'jim' ou 'm', mais pas 'jam' :</li></ul>
<pre class="brush:php;toolbar:false">test(['jim', 'm', 'jam'], /m(?!([abcdefg]))/)
  • Un autre exemple, correspondant à "max-height" mais pas à "line-height":
test(['max-height', 'line-height'], /thgieh(?!(-enil))/)

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