Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/06/2011, 21h25   #1
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 252
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 252
Points : 16
Points : 16
Par défaut chaine split en un nombre donné

Bonjour

je voudrais splitter une chaine en seulement 2 basé sur un caractère(":")

est-ce qu'un regex peut faire ça
Code :
1
2
3
4
5
s = "ticks: (41741) 0:06:57.41"
s.split(":") //trop de segments
s.split(":",2) //pas bon non plus
 
// je voudrais avoir ["ticks", "(41741) 0:06:57.41"]
____22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 22h04   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 797
Points : 35 797
Le second paramètre de split défini la taille du tableau retourné, ce qui signifie que le split sera effectué pour toute la chaine mais que les éléments de rang supérieur à celui indiqué seront supprimés, ce n'est donc pas équivalent au paramètre limit de preg_split en PHP et ce n'est surtout pas ce que tu souhaites.
Dans ton cas, tu peux essayer en faisant le split sur la chaine ': ' (avec l'espace), si cela n'est pas satisfaisant, il faudra passer par une autre méthode (par exemple avec indexOf).
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 22h08   #3
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 074
Points : 4 074
Les regexp sont chouettes à utiliser, mais assez gourmandes en ressources...
Quand on peut s'en passer pour un besoin relativement simple, j'ai tendance à suggérer la méthode "à la main" ^^
Code :
1
2
3
var s = "ticks: (41741) 0:06:57.41";
var pos = s.indexOf(":");
s = new Array(s.substr(0, pos), s.substr(pos+1));
...mais effectivement, surtout si la chaine est "maitrisée", par exemple toujours de la même forme mais avec simplement des variations dans les valeurs numériques ou les mots, une Regexp serait plus concise (mais, encore une fois, au détriment de la performance)
...mais je ne t'en ai pas parlé, hein
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 22h31   #4
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Moi en tout cas je les trouve chouettes alors j'apporte ma pierre à l'édifice.

en utilisant la méthode regex.exec().

Ou s'il y a plusieurs lignes de ce type à splitter :
Code regex :
/^([^:]+):(.*)$/gm
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 11h30   #5
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 252
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 252
Points : 16
Points : 16
Code :
1
2
3
4
s = "ticks: (41741) 0:06:57.41";
var reg = new RegExp("/^([^:]+):(.*)$/","g");
reg.exec(s)
s.split(reg)
Code :
1
2
null
["ticks: (41741) 0:06:57.41"]
?
____22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 11h54   #6
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 019
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 019
Points : 45 114
Points : 45 114
attention à la delcaration de la regex

/.../ OU new RegExp()

Code :
1
2
3
4
s = "ticks: (41741) 0:06:57.41";
var reg = /([^:]+):(.*)/g;
g=reg.exec(s)
alert(g[1]+'__________'+g[2])
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 11h55   #7
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Tourne 7 fois ton clavier au-dessus de ta tête avant de répondre :
Code JS :
var reg = new RegExp("^([^:]+):(.*)$","gm");

Edit: grillé par Spaffy '^^
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 12h32   #8
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 019
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 019
Points : 45 114
Points : 45 114
Code :
1
2
3
4
s = "ticks: (41741) 0:06:57.41";
s=s.split(/:/)
g= new Array(s.shift(),s.join(':'))
alert(g)
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 13h27   #9
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
En fait ça me fait un peu penser à la lecture d'un fichier de log ou bien des headers HTTP…
Code JS :
1
2
3
4
5
6
var s = 'ticks: (41741) 0:06:57.41\nsecure: true\nreponse: 42'
var rx = /^([^:]+):\s*(.*)$/gm
var info = {};
while (match = rx.exec(s)) {
   info[match[1]] = match[2];
}
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 13h35   #10
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
puisque vous voulez jouer...
Code :
1
2
s = "ticks: (41741) 0:06:57.41"
s=s.replace(/([^:]):(.+)/,function(ch,a,b){return [a,b]})
toujours partant
__________________
On ne mord pas, on manifeste seulement notre tristesse face à des exposés de situations qui défient notre entendement binaire.
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 30/06/2011, 13h58   #11
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Tiens, je savais pas qu'on pouvait faire ça
Code JS :
1
2
3
4
var info = {};
s.replace(/^([^:]+):\s*(.*)$/gm, function(m, m1, m2) {
   info[m1] = m2;
});
Héhé.
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h00   #12
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 074
Points : 4 074
Citation:
Envoyé par javatwister Voir le message
puisque vous voulez jouer...
Code :
1
2
s = "ticks: (41741) 0:06:57.41"
s=s.replace(/([^:]):(.+)/,function(ch,a,b){return [a,b]})
toujours partant
+1 pour l'élégance de cette solution
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h06   #13
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Élégant je dis pas… replace doit renvoyer une chaîne, alors le tableau est aplati avec un toString implicite (ou un truc du genre).
Mais j'ai mis +1 parce que j'ai appris un truc ^^
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h11   #14
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 019
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 019
Points : 45 114
Points : 45 114
oui curieux en effet que le return ne puisse pas renvoyer un array ????
Code :
1
2
3
info=[]
s = "ticks: (41741) 0:06:57.41"
s=s.replace(/([^:]+):(.+)/,function(ch,a,b){info[0]=a; info[1]=b})
he ben non logique ^^
on est sur un replace sur un string
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h21   #15
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 074
Points : 4 074
Citation:
Envoyé par SpaceFrog Voir le message
oui curieux en effet que le return ne puisse pas renvoyer un array ????
A vue de nez, on dirait qu'effectivement le return renvoie bien un array, mais il le renvoie à la fonction replace en cours d'exécution qui, elle, renvoie une chaine... ^^

edit : ah oops j'avais pas vu le reste de ta réponse SF

Mais bon, après ce tour d'horizon raffraichissant ^^ la solution la plus "légère/propre" est quand même... indexOf
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h25   #16
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
ben bizarrement, l'alerte ressemble à un tableau toString mais effectivement, s n'en est pas devenu un pour autant;
sauf à faire:

Code :
1
2
s = "ticks: (41741) 0:06:57.41";
s.replace(/([^:]+):(.+)/,function(ch,a,b){s=[a,b]});
avec ou sans return d'ailleurs...
__________________
On ne mord pas, on manifeste seulement notre tristesse face à des exposés de situations qui défient notre entendement binaire.
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h34   #17
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Ouais mais ça c'est brutal Que se passe-t-il s'il y a plusieurs occurences à traiter ?

Tiens au fait, on a pas déjà eu une conversation à propos de replace, les amis ? ^^ D'ailleurs on avait pas trouvé comment faire ça :
Code JS :
1
2
var s = 'canard laqué aux oranges';
s = s.replace(/\b\w/g, function(m) { return m.toUpperCase() });
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h40   #18
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 019
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 019
Points : 45 114
Points : 45 114
j'ai déja resolu ce cas là sur le forum ...
http://www.developpez.net/forums/d10...caracteres-js/
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h55   #19
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
les 2 derniers posts échappent un peu à mon intellect mais bon
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 15h04   #20
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 074
Points : 4 074
Citation:
Envoyé par javatwister Voir le message
les 2 derniers posts échappent un peu à mon intellect mais bon
Idem

En revanche, je pense que ____22 en a eu pour son argent (qui a dit "c'est même un peu trop ?" )
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h34.


 
 
 
 
Partenaires

Hébergement Web