Maison interface Web js tutoriel Qu'est-ce que le mode monoligne ? Explication détaillée du mode JavaScript régulier sur une seule ligne

Qu'est-ce que le mode monoligne ? Explication détaillée du mode JavaScript régulier sur une seule ligne

Apr 21, 2017 am 10:20 AM

Cet article présente principalement les expressions régulières JavaScript qui ont également un mode sur une seule ligne. Les amis qui en ont besoin peuvent s'y référer

Les expressions régulières ont été implémentées pour la première fois par Ken Thompson dans son éditeur QED amélioré en 1970. , le Le métacaractère le plus simple de l'expression régulière "." correspondait à ce moment-là à n'importe quel caractère à l'exception du caractère de nouvelle ligne :

"." La phrase ci-dessus provient du document officiel du QED de 1970, qui pourrait être le premier document régulier de l'histoire.

Pourquoi y a-t-il une telle règle ? En effet, QED édite les fichiers en unités de ligne et le caractère de nouvelle ligne à la fin de la ligne est également inclus dans le contenu de cette ligne. Par exemple, si vous souhaitez supprimer tous les commentaires sur une seule ligne dans un morceau de code, vous pouvez utiliser la commande suivante dans QED :

Si "." peut correspondre au caractère de nouvelle ligne, alors la nouvelle ligne Le caractère sera également supprimé, entraînera la fusion de ces lignes avec la ligne suivante, ce qui n'est généralement pas ce que nous voulons. Par conséquent, "." a été conçu pour ne pas correspondre aux nouvelles lignes lors de sa première invention. Bien qu'il n'y ait pas de commande QED sur le système d'exploitation actuel à tester, nous avons toujours VIM et le "." dans VIM ne peut pas correspondre au caractère de nouvelle ligne pour la même raison.
1,$s#//.*##
Copier après la connexion

Contrairement à Node, où lire un fichier signifie généralement lire le fichier entier en une seule fois, Perl hérite de la tradition de lire les fichiers ligne par ligne avec de nombreuses commandes Linux, comme ceci :

_ Il y a aussi un caractère de nouvelle ligne à la fin, donc Perl hérite naturellement de la règle de QED selon laquelle "." ne correspond pas aux caractères de nouvelle ligne. Mais Perl est après tout un langage de programmation, pas un éditeur. Les objets auxquels ses expressions régulières doivent correspondre ne sont pas seulement des lignes de texte simples, mais peuvent également être des textes sur plusieurs lignes. Par conséquent, dans ses expressions régulières, "." une exigence de correspondance entre lignes. Par conséquent, Perl a inventé le mode /s sur une seule ligne, qui permet également de faire correspondre les caractères de nouvelle ligne.
while (<>) {print $_}
Copier après la connexion

La description officielle du modificateur /s en Perl utilisé pour activer le mode ligne unique est "Traitez la chaîne comme une seule ligne". Cette "ligne unique" doit être comprise comme ceci : "." en mode normal, les caractères en ligne ne peuvent pas s'étendre sur des lignes ; en mode sur une seule ligne, Perl fera semblant de traiter les chaînes multilignes comme une seule ligne et traitera les caractères de nouvelle ligne comme des caractères en ligne, afin que "." Pour le dire plus clairement, les trois lignes de texte suivantes

sont considérées comme "1n2n3n" une ligne de texte. C'est ce que signifie le mode sur une seule ligne.
1
2
3
Copier après la connexion

Mais le plus terrible est que, pour la même raison (les variables de chaîne peuvent contenir plusieurs lignes de texte), Perl a également inventé le modificateur /m, qui est en mode multiligne. La description officielle est "Traitez la chaîne. sous forme de lignes multiples ", ce modèle a été inclus dans le code JavaScript standard depuis l'Antiquité. Le "multiligne" signifie ici : les métacaractères ^ et $ ne correspondront pas aux positions avant et après les caractères de nouvelle ligne au milieu d'une chaîne par défaut, c'est-à-dire que la chaîne est toujours considérée comme une seule ligne, vous pouvez la faire correspondre après avoir activé le mode multi-ligne.

En d'autres termes, le mode monoligne et le mode multiligne sont destinés à des métacaractères différents. Les personnes qui débutent dans les expressions régulières seront déroutées par les deux « mode monoligne » et « multiligne » apparemment correspondants. mode". concept, mais en fait, il prête à confusion avec des termes sans rapport.

Plus tard, l'auteur de Ruby a peut-être estimé que le terme habituel "mode monoligne" n'était pas bien utilisé, il a donc appelé le mode de "." correspondant aux caractères de nouvelle ligne "mode multiligne", c'est-à-dire c'est-à-dire que let * et d'autres expressions régulières peuvent correspondre à plusieurs lignes, cela est donc parfaitement logique. Le modificateur utilise également /m (Ruby activera le "mode multiligne" en Perl par défaut, donc /m n'est pas occupé). vraiment Pour ajouter l’insulte à l’injure, c’est encore plus chaotique.

Plus tard, l'auteur de Python a peut-être également estimé que le terme "mode monoligne" devait être évité, il lui a donc donné un nouveau nom "dotall", ce qui signifie que le point peut correspondre à tous les caractères. bon nom. , et plus tard Java a également utilisé ce nom.

Ce qui précède a passé en revue l'historique, expliqué l'origine du mode monoligne et expliqué que le nom du mode monoligne n'avait pas été bien choisi. La V8 a récemment implémenté une proposition ES de phase 3 github.com/mathiasbynens/es-regexp-dotall-flag. Cette proposition introduit le modificateur /s et l'attribut dotAll à la régularité JavaScript. L'attribut dotAll est appris de Python et Java. Le modificateur est hérité de Perl, et il n'est pas nécessaire d'inventer un nouveau modificateur tel que /d, ce qui ne fera que compliquer les choses. L'effet spécifique de /s en JavaScript est de permettre à "." de faire correspondre quatre terminateurs de ligne qui ne pouvaient pas correspondre auparavant : n (saut de ligne), r (retour chariot), u2028 (séparateur de ligne), u2029 (séparateur de paragraphe) :


En fait, c'est une chose très simple, mais certains étudiants qui n'ont pas été exposés à des expressions régulières autres que JavaScript peuvent être confus lorsqu'ils apprennent ce nouveau mode. Permettez-moi de clarifier à nouveau : le mode multiligne contrôle les performances de ^ et $, et le mode monoligne contrôle les performances de ".". Il n'y a pas de relation directe entre les deux.
/foo/s.dotAll // true
/^.{4}$/s.test("\n\r\u2028\u2029") // true
Copier après la connexion

Cependant, le langage Perl, qui a initialement introduit les concepts déroutants de mode monoligne et de mode multiligne, a complètement supprimé ces deux modes dans Perl 6 : "." correspondra au caractère de nouvelle ligne par défaut, et N peut correspondre à n'importe quel caractère sauf les nouvelles lignes ; ^ et $ correspondent toujours au début et à la fin de la chaîne, tandis que les deux nouveaux métacaractères ^^ et $$ sont introduits pour correspondre au début et à la fin de la ligne.

Les alternatives au mode monoligne [^] ou [sS] que nous avons utilisées dans le passé ne sont pas totalement inutiles. Par exemple, dans certains éditeurs qui utilisent la régularité JavaScript (VS Code, Atom), il est peu probable qu'elles vous soient fournies. avec la possibilité d'activer l'interface en mode monoligne. Cependant, en parlant de la fonction normale de l'éditeur, la fonction normale de l'éditeur implémentée en JavaScript est encore trop faible. Par exemple, certains modes ne peuvent pas être activés dans le code normal lui-même, par exemple s'il est dans Sublime (en utilisant). Code normal Python), à l'intérieur du code normal, utilisez (?s) pour activer le mode dotall. Par exemple, vous pouvez utiliser (?s)/*.+?*/ pour faire correspondre tous les commentaires multilignes.

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 pm 02:54 PM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Dec 17, 2023 pm 12:09 PM

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 am 09:39 AM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel Dec 17, 2023 pm 05:13 PM

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Comment faire correspondre plusieurs mots ou chaînes à l'aide de l'expression régulière Golang ? Comment faire correspondre plusieurs mots ou chaînes à l'aide de l'expression régulière Golang ? May 31, 2024 am 10:32 AM

Les expressions régulières Golang utilisent le caractère barre verticale | pour faire correspondre plusieurs mots ou chaînes, séparant chaque option comme une expression OU logique. Par exemple : correspond à "fox" ou "dog" : fox|dog correspond à "quick", "brown" ou "lazy" : (quick|brown|lazy) correspond à "Go", "Python" ou "Java" : Go| Python |Java fait correspondre des mots ou des codes postaux à 4 chiffres : ([a-zA

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Comment utiliser insertBefore en javascript Comment utiliser insertBefore en javascript Nov 24, 2023 am 11:56 AM

Utilisation : En JavaScript, la méthode insertBefore() est utilisée pour insérer un nouveau nœud dans l'arborescence DOM. Cette méthode nécessite deux paramètres : le nouveau nœud à insérer et le nœud de référence (c'est-à-dire le nœud où le nouveau nœud sera inséré).

See all articles