Comment diviser un long morceau de texte en plusieurs lignes? Pourquoi ce retour line1 deux fois?
/^(.*?)$/mg.exec('line1\r\nline2\r\n');
["line1", "line1"]
J'ai activé le modificateur multiligne pour faire ^
et $
fait correspondre le début et la fin des lignes. J'ai également activé le modificateur global pour capturer les lignes toutes.
Je souhaite utiliser un regex split et non String.split
_ parce que je vais traiter à la fois Linux \n
et Windows \r\n
fins de lignes.
arrayOfLines = lineString.match(/[^\r\n]+/g);
Comme Tim l'a dit, c'est à la fois le match et la capture. Il semble que regex.exec(string)
retourne lors de la recherche de la première correspondance, quel que soit le modificateur global, alors que string.match(regex)
respecte la règle globale.
Utilisation
result = subject.split(/\r?\n/);
Votre regex retourne line1
deux fois parce que line1
est à la fois la correspondance entière et le contenu du premier groupe de capture.
Je suppose que ce qui suit constitue une nouvelle ligne
Veuillez utiliser
var re=/\r\n|\n\r|\n|\r/g;
arrayofLines=lineString.replace(re,"\n").split("\n");
pour un tableau de toutes les lignes, y compris les lignes vides.
OU
Veuillez utiliser
arrayOfLines = lineString.match(/[^\r\n]+/g);
Pour un tableau de lignes non vides
Encore plus simple regex qui gère toutes les combinaisons de fin de ligne, même mélangés dans le même fichier, et supprime également les lignes vides:
var lines = text.split(/[\r\n]+/g);
Avec la découpe d'espaces:
var lines = text.trim().split(/\s*[\r\n]+\s*/g);
Tout d'abord remplacer tous les \r\n
avec \n
, alorsString.split
.
var lines = text.match(/^.*((\r\n|\n|\r)|$)/gm);
J'ai fait quelque chose comme ça. Le lien ci-dessus est mon violon.