Я работаю над программой на C #, которая должна загрузить некоторый код JavaScript, разобрать его и выполнить некоторую обработку для строковых литералов , найденных в коде (например, перезаписать их чем-то другим).
Моя проблема в том, что мне трудно придумать элегантный способ на самом деле найти строковые литералы в коде javascript.
Например, взгляните на пример кода JavaScript ниже. Видите ли вы, как даже подсвечиватель кода в Stack Overflow способен выделять строковые литералы в коде и делать их красными в цвете?
Я хочу в основном сделать то же самое, за исключением того, что я не буду превращать их в другой цвет, но я сделаю некоторую обработку для них и, возможно, заменит его совершенно другим строковым литералом.
var dp = {
sh : // dp.sh
{
Utils : {}, // dp.sh.Utils
Brushes : {}, // dp.sh.Brushes
Strings : {},
Version : '1.3.0'
}
};
dp.sh.Strings = {
AboutDialog : '<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter</a></p>©2004-2005 Alex Gorbatchev. All right reserved.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>',
// tools
ExpandCode : '+ expand code',
ViewPlain : 'view plain',
Print : 'print',
CopyToClipboard : 'copy to clipboard',
About : '?',
CopiedToClipboard : 'The code is in your clipboard now.'
};
dp.test1 = 'some test blah blah blah' + someFunction() + 'asdfasdfsdf';
dp.test2 = 'some test blah blah blah' + 'xxxxx' + 'asdfasdfsdf';
dp.test3 = 'some test blah blah blah' + "XXXXsdf "" \" \' ' sdfdff "" \" \' ' asdfASDaSD FASDF SDF' + 'asdfasdfsdf";
dp.SyntaxHighlighter = dp.sh;
Я попытался разобрать в поисках кавычек, но это усложняется, когда у вас есть escape-символы в строковом литерале. Другое решение, о котором я думал, - это использовать RegEx, но я недостаточно силен с Регулярными выражениями, и я даже не уверен, что это тот путь, который мне следует изучить.
Хотелось бы посмотреть, что думает Stack Oveflow. Большое спасибо!