2012-04-12 3 views
0

im пытается проанализировать следующую строку;как разбирать строку

"data[Product][0][fieldname]" 

мне нужно, чтобы иметь возможность изменить «[0]» часть ряда, то «данные [Product]» обыкновение изменения в то время как «[имя_поля]» изменится.

им не уверен, как это сделать с помощью javascript, но имеет приблизительную идею.

все, что у меня есть, что неправильно, ниже, но поскольку [0] меняется каждый раз, когда он не работает;

name="data[Product][0][fieldname]"; 
name.replace('[0]', '['+newrowid+']' 

Jsfiddle; http://jsfiddle.net/fuzzy_dunlop/8WKcs/

+0

вам нужно перебирать это поле? Я имею в виду, что это может быть [0], [1] ... и т. Д.? – gabitzish

+0

Является ли эта часть атрибута имени ввода или объектом JavaScript, который должен анализироваться как реальный объект? –

+1

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

ответ

5

Используйте регулярное выражение:

var a = "data[Product][0][fieldname]"; 
var re = /(.*\[.*\]\[)(.*)(\]\[.*\])/gi; 

newstr = a.replace(re, "$1" + "YourString" + "$3"); 
document.write("Now: " + newstr); 

Пример кода: http://jsfiddle.net/NKbd9/1/

+0

Я буду еще более конкретным с регулярным выражением: '^ data \ [Product \] \ [(\ d *) \] \ [(\ S *) \] $' Ты избил меня, потому что я мог Не помню точный синтаксис для работы с регулярными выражениями в javascript. ;) –

+0

Более конкретным было бы лучше, если отказ был бы правильно пойман. Я бы согласился с фиксацией «Продукта», поскольку он уточнил это в своем вопросе. Однако \ d и \ S являются предположениями нашей части, которые могут однажды сломать код, поскольку полные спецификации недоступны. – Konerak

+0

И хотя регулярное выражение так близко к моему любимому Perl, я тоже использовал JSFiddle не только как услугу для вопросника, но и как способ для меня дважды проверить здесь;] – Konerak

0

Я предполагаю, что вы пытаетесь сделать это внутри цикла, в этом случае вам просто нужно сделать его динамичным. Кроме того, эта замена не меняет текущую строку, она возвращает новую строку, поэтому вам нужно присвоить значение, возвращенное к имени.

var i = 0, 
     len = 10, 
     name, 
     newrowid = 13; 
for(; i <len; i++) { 
    name = "data[Product]["+i+"][fieldname]"; 
    name = name.replace('['+i+']', '['+newrowid+']'); 
} 
1

Используйте это вместо

name = name.replace('[0]', '['+newrowid+']'); 
1

Заменить можно взять регулярное выражение вместо строки.

Попробуйте это:

name="data[Product][0][fieldname]"; 
name.replace(/\[\d\]/, '['+newrowid+']'); 
Смежные вопросы