J'ai un texte dans une zone de texte et je l'ai lu à l'aide de l'attribut .value.
Maintenant, je voudrais supprimer tous les sauts de ligne (le caractère produit lorsque vous appuyez sur Enter) de mon texte en utilisant maintenant .replace avec une expression régulière, mais comment puis-je indiquer un saut de ligne dans une expression régulière?
Si ce n'est pas possible, existe-t-il une autre voie?
javascript
regex
string
Wingblade
la source
la source
Réponses:
Il s'agit probablement d'une FAQ. Quoi qu'il en soit, les sauts de ligne (mieux: les nouvelles lignes) peuvent être des retours chariot (CR ,,
\r
sur les anciens Mac), des\n
sauts de ligne (LF ,, sur Unices incl. Linux) ou CR suivis de LF (\r\n
, sur WinDOS). (Contrairement à une autre réponse, cela n'a rien à voir avec le codage des caractères.)Par conséquent, le
RegExp
littéral le plus efficace pour correspondre à toutes les variantes estSi vous souhaitez faire correspondre toutes les nouvelles lignes d'une chaîne, utilisez une correspondance globale,
respectivement. Continuez ensuite avec la
replace
méthode comme suggéré dans plusieurs autres réponses. (Vous ne voulez probablement pas supprimer les sauts de ligne, mais remplacez-les par d'autres espaces, par exemple le caractère espace, afin que les mots restent intacts.)la source
\u000a
ou\n
, qui est un saut de ligne;\u000d
ou\r
, qui est un retour chariot;\u2028
, un séparateur de ligne; et\u2029
, un séparateur de paragraphe. Dans la pratique cependant, l'expression régulière que vous avez publiée est suffisante dans la plupart des cas..value
dynamique de la zone de texte , par exempletextarea.value = 'a\u2029b'; textarea.value.charAt(1) == '\u2029'; // true
. Mais c'est probablement un cas de bord - comme je l'ai dit, dans la plupart des cas, votre expression régulière est suffisante.La façon dont vous trouveriez un saut de ligne varie selon les encodages du système d'exploitation. Windows le serait
\r\n
, mais Linux utilise simplement\n
et Apple utilise\r
.J'ai trouvé cela dans les sauts de ligne JavaScript :
Cela devrait supprimer toutes sortes de sauts de ligne.
la source
\r\n
et\n
et\r
mieux que juste/[\n\r]/g
? Cela est sûrement plus lent qu'il ne devrait l'être, car il suffit de comparer chaque personnage avec l'ensemble des deux options possibles.String.trim()
supprime les espaces au début et à la fin des chaînes ... y compris les sauts de ligne.Voici un exemple de violon: http://jsfiddle.net/BLs8u/
REMARQUE! il ne coupe que le début et la fin de la chaîne, pas les sauts de ligne ni les espaces au milieu de la chaîne.
la source
Vous pouvez utiliser
\n
dans une expression régulière pour les retours à la ligne et\r
pour les retours chariot.Différents systèmes d'exploitation utilisent différentes fins de ligne, avec des mélanges variés de
\n
et\r
. Cette expression régulière les remplacera tous.la source
/\n|\r/g
est écrit plus efficacement/[\n\r]/g
ou même/[\n\r]+/g
. Évitez l'alternance, sauf si vous en avez absolument besoin.Si vous souhaitez supprimer tous les caractères de contrôle, y compris CR et LF, vous pouvez utiliser ceci:
Il supprimera tous les caractères non imprimables. Ce sont tous des caractères qui NE SONT PAS dans l'espace ASCII HEX
0x20-0x7E
. N'hésitez pas à modifier la gamme HEX selon vos besoins.la source
La solution la plus simple serait:
.replace()
avec/\s+/g
regexp change tous les groupes de caractères d'espaces blancs en un seul espace dans la chaîne entière, puis nous avons.trim()
pour résultat de supprimer tous les espaces blancs excédants avant et après le texte.Sont considérés comme des espaces blancs:
[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
la source
str = str.replace(/\s+/g, ' ').trim();
la source
Pour supprimer les nouveaux caractères de ligne, utilisez ceci:
Ensuite, vous pouvez couper votre chaîne pour supprimer les espaces de début et de fin:
la source
La réponse fournie par PointedEars est tout ce dont la plupart d'entre nous ont besoin. Mais en suivant la réponse de Mathias Bynens, je suis allé sur Wikipédia et j'ai trouvé ceci: https://en.wikipedia.org/wiki/Newline .
Ce qui suit est une fonction drop-in qui implémente tout ce que la page Wiki ci-dessus considère comme "nouvelle ligne" au moment de cette réponse.
Si quelque chose ne correspond pas à votre étui, retirez-le simplement. De plus, si vous recherchez des performances, ce n'est peut-être pas le cas, mais pour un outil rapide qui fait le travail dans tous les cas, cela devrait être utile.
la source
\R
ce qui est "tous" les sauts de ligne. Deuxièmement - pourquoi pas simplementsomeString.replace(new RegExp(lineTerminators.join('|')), '');
replace()
pour lelineTerminators
qui existait dans la chaîne pour des raisons de performances.Un saut de ligne dans l'expression régulière est \ n, donc votre script serait
la source
J'ajoute ma réponse, c'est juste un addon à ce qui précède, car pour moi j'ai essayé toutes les options / n et cela n'a pas fonctionné, j'ai vu que mon texte venait du serveur avec une double barre oblique alors j'ai utilisé ceci:
la source
UTILISEZ CETTE FONCTION CI-DESSOUS ET FACILITEZ VOTRE VIE
L'approche la plus simple consiste à utiliser des expressions régulières pour détecter et remplacer les sauts de ligne dans la chaîne. Dans ce cas, nous utilisons la fonction replace avec une chaîne à remplacer, qui dans notre cas est une chaîne vide.
Dans l'expression ci-dessus, g et m sont pour les drapeaux globaux et multilignes
la source
Essayez le code suivant. Il fonctionne sur toutes les plateformes.
la source
Sur mac, utilisez simplement
\n
dans regexp pour faire correspondre les sauts de ligne. Ainsi, le code serastring.replace(/\n/g, '')
, ps: le g suivi signifie correspondre à tous au lieu de simplement le premier.Aux fenêtres, ça le sera
\r\n
.la source