2012-04-12 6 views
0

im versuchen, die folgende Zeichenfolge analysieren;wie man string

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

i müssen in der Lage sein, das zu ändern „[0]“ Teil einer Reihe, die „data [Product]“ wird nicht ändern, während der „[Feldname]“ ändern.

ich bin nicht sicher, wie es mit Javascript zu tun, aber eine grobe Idee haben.

alles, was ich habe, was falsch ist, ist unten, aber da [0] variiert jedes Mal, wenn es nicht funktioniert;

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

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

+0

Sie müssen das Feld wiederholen? Ich meine, es kann [0], [1] ... usw. sein. – gabitzish

+0

Ist dieser Teil eines Eingabe-Namensattributs oder eines JavaScript-Objekts, das als reales Objekt analysiert werden soll? –

+1

Das ist eine dieser Fragen, die mich glauben machen, dass, wenn wir etwas "herauszoomen" könnten, eine weit, viel bessere Gesamtlösung gefunden werden könnte. – Pointy

Antwort

5

einen regulären Ausdruck verwenden:

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

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

Beispielcode: http://jsfiddle.net/NKbd9/1/

+0

Ich würde mit der Regex noch spezifischer werden: '^ data \ [Product \] \ [(\ d *) \] \ [(\ S *) \] $' Du hast mich dazu geschlagen, weil ich es nicht konnte erinnere mich an die genaue Syntax für die Arbeit mit regulären Ausdrücken in Javascript. ;) –

+0

Genauer wäre es besser, wenn der Fehler richtig abgefangen würde. Ich stimme der Festlegung des "Produkts" zu, da er dies in seiner Frage spezifiziert hat. Jedoch sind \ d und \ S Annahmen von unserem Teil, die eines Tages den Code brechen könnten, da keine vollständigen Spezifikationen verfügbar sind. – Konerak

+0

Und obwohl die Regexp so sehr nah an meiner geliebten Perl ist, habe ich JSFiddle nicht nur als Service für den Fragesteller benutzt, sondern auch als einen Weg, um mich hier zu überprüfen;] – Konerak

0

Ich nehme an, Sie versuchen, dies innerhalb einer Schleife zu tun, in diesem Fall müssen Sie nur, um es dynamisch zu machen. Außerdem ersetzt diese Ersetzung nicht die aktuelle Zeichenkette, sondern gibt eine neue Zeichenkette zurück, so dass Sie den zurückgelieferten Wert dem Namen zuweisen müssen.

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

verwenden stattdessen

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

einen regulären Ausdruck anstelle eines Strings nehmen ersetzen können.

Try this:

name="data[Product][0][fieldname]"; 
name.replace(/\[\d\]/, '['+newrowid+']'); 
Verwandte Themen