В приложении я пишу, в какой-то момент, я хочу, чтобы иметь возможность анализировать тегах как строку с RegExp так, что он изменяется, например:RegExp Parser для Tag-шпагат
"{b}This is BOLD{/b}".replace(/\{b\}(.*?)\{\/b\}/gi, "00b3f[ $1 00b3d]");
// Returns "00b3f[ This is BOLD 00b3d]"
Я могу сделать это легко, но это становится сложнее, когда более сложная строка передается функции, например:
"{red} This is RED {red} This also should be red {/red} and this {/red}"
.replace(/\{red\}(.*?)\{\/red\}/gi, "00b4f[ $1 00b4d]");
// Returns:
// "00b4f[ This is RED {red} This also should be red 00b4d] and this {/red}"
// Where the output should be:
// "00b4f[ This is RED 00b4f[ This also should be red 00b4d] and this 00b4d]"
Я хотел бы решить эту проблему с помощью простого RegExp, но я могу» t найти способ сделать это! Я думаю, что смогу сделать это с помощью цикла while, но это будет слишком грязно. Какие-либо предложения?
Вы не можете решить эту проблему с помощью регулярных выражений, потому что язык вы описываете контекстно-зависимая, но не регулярный - в простых терминах это означает «вам нужна память для его анализа», что вы наблюдали. Я рекомендую простой рекурсивный анализатор спуска. –
Related: http://stackoverflow.com/q/1732348/1026459 –