我想解析包含簡碼的字符串,並將每個提取的節點推送到數組中。然而,我爲此編寫的遞歸函數永遠不會終止。我在這裏做錯了什麼?使用正則表達式在Javascript中的遞歸函數中解析
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);
你能告訴我們什麼輸出將是你的榜樣嗎? – JordanHendrix
在遞歸函數中錯過了'return'。 ['return extractNodes(m [3],i ++);'](https://jsfiddle.net/tusharj/p4jkkado/) – Tushar
@Tushar返回似乎不是問題。有一些關於正則表達式的問題,它爲每次迭代發送相同的'str'參數:https://jsfiddle.net/igor_9000/9yaz6cdu/ –