2012-05-31 28 views
2

我在文本“data-RowKey = xxx”中有一个字符串名称内容。我试图摆脱XXX所以我尝试了以下内容:如何使用javascript解析字符串中的值?

var val = content.substring(12 + content.indexOf("data-RowKey="), 3); 

这并不在所有的工作。而不是只得到三个字符,我得到一个很长的字符串。任何人都可以看到我做错了什么

+0

如果您提供的'content'的例子,我们也许能够提供更好的方法。 –

回答

1

这工作:

var value = content.match(/data-RowKey=(.*)/)[1]; 

Live DEMO

如果xxx后可能有值,使用:

"data-RowKey=123abc".match(/data-RowKey=(.{3}).*/)[1] // 123 
+0

这也会匹配'data-RowKey = xxx'之后的所有内容。 –

+0

@FelixKling。在他的代码中,没有。但我为此增加了一种方法。 – gdoron

+0

RowKey =后只有三个字符。它只会匹配三个吗? – Alan2

2

.substring()[MDN]需要两个索引,.substr()[MDN]取一个索引和长度。尝试:

var val = content.substr(12 + content.indexOf("data-RowKey="), 3); 

如果"data-RowKey=xxx"是整个串,还有许多其他的方式来获得xxx

var val = content.replace('data-RowKey=', ''); 
var val = content.split('=')[1]; // assuming `=` does not appear in xxx 
2

你正在使用错误的工具。当您想要捕捉符合某种模式的数据时,应该使用regular expressions。如果您的值恰好是三个符号,则正确表达式将为/data-RowKey=(...)/,其中.代表任何符号,()指定要捕获的部分。

+2

如果“模式”是静态的,那么绝对不要使用正则表达式。 '-'只是字符类中的特殊字符。 –

+0

确实。固定。对不起,但在我的书中,调用两个单独的对象方法而不是专门写入解析模式的内置工具是“不好的”。直接在字符串索引上操作并不比手动分配内存更好 - 您必须自己跟踪所有内容。在这种情况下,例如,如果没有“data-RowKey =”,它将失败并发生异常。 –

+0

正则表达式比简单的字符串处理方法更昂贵。见http://jsperf.com/string-methods-vs-regex –

0

如果您rowkey是数字,这可能是最好的,因为你获得整数的数字,不需要稍后转换:

var val = parseInt(content.split("data-RowKey=")[1]); 

如果总是三个字符和/或无需转换:

var val = content.split("data-RowKey=")[1].substring(0,3);