2010-07-22 9 views
3

J'ai un tableau qui contient des champsComment manipuler la chaîne dans un tableau

comme celui-ci

ctl00_ctl00_cphBody_bodycph_content_rdo_SID_25_SortOrder_17 
ctl00_ctl00_cphBody_bodycph_content_rdo_SID_25_SortOrder_18 
ctl00_ctl00_cphBody_bodycph_content_rdo_SID_25_SortOrder_19 

Je veux créer un nouveau tableau ou de manipuler ce tableau pour contenir uniquement

sid = {25,26,27} 

de

_SID_25 
_SID_26 
_SID_27 

où sid sera mon tableau contenant extrait de tableau ci-dessus sid avec motif _SID_

Je dois faire en jquery ou javascript

Répondre

7

utilisation carte jquery + regexp

var arr= ['tl00_ctl00_cphBody_bodycph_content_rdo_SID_25_SortOrder_17', 
    'ctl00_ctl00_cphBody_bodycph_content_rdo_SID_26_SortOrder_18', 
    'ctl00_ctl00_cphBody_bodycph_content_rdo_SID_27_SortOrder_19'] 

    var out = $(arr).map(function(){ 
     return this.match(/SID_(.*?)_/)[1]; 
    }); 

out doit être un tableau des valeurs ..

(en supposant que toutes les valeurs du tableau ne correspondent au motif)

+0

@Ben: pourquoi avez-vous utilisé '[1]' dans 'this.match (/ SID _ (. *?) _ /) [1]'. Quelle tâche accomplit-elle? –

+1

@Shantanu. match retourne un tableau, avec le premier item (0) l'ensemble de l'expression correspondante et le second (1) le premier groupe de capture, ie. l'expression. Essayez d'ajouter console.log (this.match (/ SID _ (. *?) _ /)) Avant le retour et exécutez-le dans firefox + firebug pour voir les résultats de la fonction de correspondance – Ben

+0

Surtout comme l'utilisation de 'map' à obtenir un tableau transformé. – xtofl

4

J'utiliser regex ici

var sid = [] 
var matches = "ctl00_ctl00_cphBody_bodycph_content_rdo_SID_25_SortOrder_17".match(/_SID_(\d+)/); 
if(matches) sid.push(parseInt(matches[1])); 
+0

Pourriez-vous s'il vous plaît fournir plus de détails sur la façon dont il me serait obtenir le chiffre dans le tableau? –

+0

La partie "(\ d +)" de la regex est considérée comme n'acceptant que les chiffres – nemke

+0

J'ajouterais 'assert (matches.count == 1)'. – xtofl

0

Cette solution est totalement dépendante de la forme globale de chaîne ne change pas trop, à savoir le nombre de « souligne » ne change pas qui semble fragile, les accessoires donnés commenter ci-dessous, mais il avait l'indice faux. Ma solution originale s'est d'abord scindée sur "SID_" car cela ressemblait plus à une clé qui serait toujours présente dans la chaîne à venir.

Étant donné:

s = "ctl00_ctl00_cphBody_bodycph_content_rdo_SID_25344_SortOrder_17" 

ancienne solution:

array.push(parseInt(s.split("SID_")[1].split("_")[0])) 

nouvelle solution

array.push(parseInt(s.split("_")[7]) 
+0

Nice, sauf qu'il ne fonctionne que pour les nombres à 2 chiffres. – xtofl

+0

pourquoi pas simplement 's.split (" _ ") [6]'? –

Questions connexes