2009-06-24 5 views
1

Cela devrait être assez simple, peut-être utiliser une regex mais je pense qu'il y a un moyen plus facile - plus rapide. Actuellement, je fais ce travail en utilisant un couple de divisions, mais cela semble vraiment une mauvaise méthode.Un moyen efficace pour trouver une chaîne entre deux autres chaînes via Javascript

chaîne Exemple:

le 09 juin 2009. Marqué:

Ce que je dois faire est de tourner cette date (09 Juin, 2009) en trois chaînes (juin, 09, 2009). Évidemment cette date peut varier à des choses comme le 25 mai 2011. Je suppose que l'utilisation des deux chaînes extérieures qui seraient cohérentes ("on" et ". Tagged") et la recherche basée sur eux est la meilleure méthode. Le mois sera toujours trois lettres.

Quelle serait une meilleure façon de le faire via Javascript?

Merci!

+0

Comment est le format? Le mois sera-t-il toujours le quatrième, cinquième et sixième personnage? La date sera-t-elle toujours les huitième et neuvième caractères? L'année sera-t-elle toujours du douzième au quinzième? – Nosredna

+0

De même, comment voulez-vous que les chaînes soient renvoyées? Dans un tableau? Like ["Jun", "09", "2009"]? – Nosredna

+0

Non, la position de la date peut se déplacer et il y a plus à la chaîne avant le "on" et après le "tagged". Les regex ci-dessous fonctionnent bien pour trouver les bonnes données. Je voudrais insérer les trois morceaux de cordes trouvés dans un tableau. –

Répondre

3

Vous pouvez le faire en utilisant des commandes de sous-chaînes, mais une regex serait plus simple et moins susceptible de se casser si les données source étaient changées.

Vous pouvez utiliser cette regex:

var input = "on Jun 09, 2009 Tagged:"; 
var date = input.match(/([a-zA-Z]{3}) (\d{1,2}), (\d{4})/); 
// date = ["Jun 09, 2009", "Jun", "09", "2009"]; 
var simpledate = date.slice(1); 
// simpledate = ["Jun", "09", "2009"]; 

Lors de l'utilisation regex, je trouve ce site extrêmement utile: http://www.regular-expressions.info/javascriptexample.html

Il fournit un testeur de regex JavaScript qui est très pratique! Vous pouvez brancher les mêmes données et une expression régulière et l'exécuter et voir les données correspondantes. Cela m'a aidé à mieux comprendre les expressions régulières. Par exemple, vous pouvez voir que mon regex et les autres réponses sont différentes mais accomplissent la même chose.

+0

Cela fonctionne bien à moins que la chaîne ne soit précédée d'une autre chaîne de caractères de trois lettres. Par exemple "Cela a été posté le Jun 09, 2009 Tagged:". "était" devient un problème. J'aurais dû noter que la chaîne peut différer légèrement au début/à la fin, bien que "on" précède toujours la date et "Tagged:" soit toujours sur sa queue. –

+0

Je l'ai testé avec divers mots avant le Jun et ça marche bien. La raison en est qu'il est à la recherche de trois lettres seulement si elles sont suivies de deux chiffres, donc cela devrait toujours correspondre à la date. –

+0

Vous avez absolument raison. Merci beaucoup! –

4

Vous pouvez utiliser une expression régulière:

var match = str.match(/on (\w+) (\d{2}), (\d{4})\. Tagged/); 
// match = ["on Jun 09, 2009. Tagged", "Jun", "09", "2009"] 
+0

Cela fonctionne bien, mais je pense que lorsque la chaîne commence comme "on". Si elle est prolongée un peu, comme "Posté le 09 juin 2009. Tagged:" - il ne semble pas fonctionner. J'aurais dû expliquer que le début/la fin de la chaîne peut varier, mais la date est toujours précédée de "on". –

+0

Cela fonctionne pour moi: "Posté le 09 juin 2009. Tagged:". Match (/ sur (\ w +) (\ d {2}), (\ d {4}) \. Tagged /) renvoie le même résultat . – Gumbo

2

Vous pouvez rechercher la chaîne en utilisant la recherche/tranche ... Ce n'est pas aussi efficace que RegEx.

<script type="text/javascript"> 
    function sBs(ss1,ss2,fs) { 
    ss1 = fs.search(ss1) + ss1.length; // continue *after* the first substring 
    ss2 = fs.search(ss2); //grab the position of the beginning of substring2 
    var sbsResult = fs.slice(ss1,ss2); 
    alert(sbsResult); 
} 
</script> 
<a href="#" onClick="sBs('a','b','a b c');">get substring!</a> 
Questions connexes