2010-07-22 6 views
3

У меня есть массив, который содержит несколько полейКак манипулировать строку в массиве

как этот

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 

Я хочу, чтобы создать новый массив или манипулировать этот массив содержит только

sid = {25,26,27} 

из

_SID_25 
_SID_26 
_SID_27 

где с.и.д. будет мой массив, содержащий с.и.д. добыли из выше массива с рисунком _SID_

Я должен сделать это в JQuery или JavaScript

ответ

7

использование JQuery карта + регулярное выражение

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]; 
    }); 

из должен быть массив значений ..

(предполагается, что все значения в массиве сделать соответствует шаблону)

+0

@Ben: почему вы использовали '[1]' в 'this.match (/ SID _ (. *?) _ /) [1]'. Какую задачу он выполняет. –

+1

@Shantanu. match возвращает массив, причем первый элемент (0) - все согласованное выражение, а вторая (1) - первая группа захвата, т.е. выражение. Попробуйте добавить console.log (this.match (/ SID _ (. *?) _ /)) Перед возвратом и запустите его в firefox + firebug, чтобы увидеть результаты функции соответствия. – Ben

+0

Особенно нравится использование 'map' для получить преобразованный массив. – xtofl

4

Я хотел бы использовать регулярное выражение здесь

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

могли бы вы предоставить более подробную информацию о том, как бы он мне получить цифру в массиве? –

+0

«(\ d +)» часть в регулярном выражении считается принятой только цифрами – nemke

+0

Я бы добавил 'assert (matches.count == 1)'. – xtofl

0

Этого решения полностью зависит от общей формы строки не меняется слишком много, то есть число «подчеркивает» не меняется, которая кажется хрупким, реквизит данные к комментатору ниже, но у него был неверный индекс. Мое первоначальное решение сначала разделилось на «SID_», поскольку это больше похоже на ключ, который всегда будет присутствовать в строке, идущей вперёд.

Дано:

s = "ctl00_ctl00_cphBody_bodycph_content_rdo_SID_25344_SortOrder_17" 

старое решение:

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

новое решение

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

Nice, за исключением того, что он работает только для 2-значных чисел. – xtofl

+0

Почему не просто 's.split (" _ ") [6]'? –

Смежные вопросы