【发布时间】:2016-04-04 01:57:23
【问题描述】:
我想解析一个包含短代码的字符串并将每个提取的节点推入一个数组。然而,我为此编写的递归函数永远不会终止。我在这里做错了什么?
var i = 0;
var nodes = [];
var pattern = /(\[sc_(\w+)[\s\w="_-]*\])(.*)(\[\/sc_\2\])/gi;
var extractNodes = function(str, parent) {
var m;
if (str.indexOf('[sc_') === -1) return;
while ((m = pattern.exec(str)) !== null) {
nodes.push({
id: i,
tag: m[2],
children: m[3],
parentId: parent
});
extractNodes(m[3], i++);
}
}
extractNodes("[sc_div][sc_span][sc_strong]Foo[/sc_strong][/sc_span][/sc_div]", -1);
【问题讨论】:
-
你能告诉我们你的例子的输出是什么吗?
-
在递归函数中错过了
return。return extractNodes(m[3], i++); -
@Tushar return 似乎不是问题。正则表达式有些东西,它为每次迭代发送相同的
str参数:jsfiddle.net/igor_9000/9yaz6cdu -
@AdamKonieska 对!缺少代码
break
标签: javascript regex parsing recursion