2012-04-12 146 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+']');