ショートコードを含む文字列を解析し、抽出された各ノードを配列にプッシュしたいと考えています。しかし、これについて書いた再帰関数は決して終了しません。私はここで間違って何をしていますか?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/ –