2012-04-12 166 views
0

即時試圖解析下面的字符串;如何解析字符串

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

我需要能夠以「[0]」的一部分改變爲一個數字,「數據[產品]」不會變化,而在「[字段名]」會發生變化。

即時通訊不知道如何使用JavaScript,但有一個粗略的想法。

所有我有哪些是錯誤的,是在下面,但因爲[0]每次都不起作用;

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

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

+0

需要迭代的那場?我的意思是它可以是[0],[1] ...等等? – gabitzish 2012-04-12 14:08:19

+0

這是輸入名稱屬性的一部分,還是應該被解析爲真實對象的JavaScript對象? – 2012-04-12 14:08:40

+1

這是使我想到的問題之一,如果我們能夠「縮小」一點,可以找到一個更好,更好的整體解決方案。 – Pointy 2012-04-12 14:08:52

回答

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中使用正則表達式的確切語法。 ;) – 2012-04-12 14:14:03

+0

更具體的會更好,如果失敗將被正確捕獲。我同意修正「產品」,因爲他在他的問題中指出了這一點。然而,\ d和\ S是我們部分的假設,可能有一天會打破代碼,因爲沒有完整的規範可用。 – Konerak 2012-04-12 14:16:01

+0

儘管正則表達式與我親愛的Perl非常接近,但我也將JSFiddle作爲服務提供給問題提示器,同時也作爲我自己在這裏進行仔細檢查的一種方式;] – Konerak 2012-04-12 14:17:07

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+']');