admin管理员组文章数量:1430083
I am working on a program in C# that needs to load some JavaScript code, parse it and do some processing to the string literals found in the code (such as overwrite them with something else).
My problem is that I'm having a difficult time devising an elegant way to actually find the string literals in the JavaScript code in the first place.
For example, take a look at the sample JavaScript code below. Do you see how even Stack Overflow's code highlighter is able to pick out string literals in the code and make them red in color?
I want to basically do the same thing, except I will not be turning them into a different color, but I will do some processing on them and possibly replace it with an entirely different string literal.
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="/?ref=about" target="_blank">;/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;
I have tried parsing through looking for quotes, but it gets plicated when you have escape characters in the string literal. The other solution I was thinking is to use a RegEx, but I am not strong enough with Regular Expressions and I'm not even sure if that is the avenue I should be perusing.
I would like to see what Stack Overflow thinks. Thanks a bunch!
I am working on a program in C# that needs to load some JavaScript code, parse it and do some processing to the string literals found in the code (such as overwrite them with something else).
My problem is that I'm having a difficult time devising an elegant way to actually find the string literals in the JavaScript code in the first place.
For example, take a look at the sample JavaScript code below. Do you see how even Stack Overflow's code highlighter is able to pick out string literals in the code and make them red in color?
I want to basically do the same thing, except I will not be turning them into a different color, but I will do some processing on them and possibly replace it with an entirely different string literal.
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./syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections./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;
I have tried parsing through looking for quotes, but it gets plicated when you have escape characters in the string literal. The other solution I was thinking is to use a RegEx, but I am not strong enough with Regular Expressions and I'm not even sure if that is the avenue I should be perusing.
I would like to see what Stack Overflow thinks. Thanks a bunch!
Share Improve this question edited Sep 26, 2020 at 15:12 Alex 1,5801 gold badge15 silver badges27 bronze badges asked Mar 24, 2009 at 6:05 7wp7wp 12.7k20 gold badges79 silver badges108 bronze badges1 Answer
Reset to default 7Regexs in Depth: Advanced Quoted String Matching has some good examples of how to do this with a regex.
One of the approaches is this:
(["'])(?:(?!\1)[^\\]|\\.)*\1
You could use it as follows:
string modifiedJavascriptText =
Regex.Replace
(
javascriptText,
@"([""'])(?:(?!\1)[^\\]|\\.)*\1", // Note the escaped quote
new MatchEvaluator
(
delegate(Match m)
{
return m.Value.ToUpper();
}
)
);
in this case, all of the string literals are made upper case.
本文标签: chow to tokenizeparse string literals from javascript source codeStack Overflow
版权声明:本文标题:c# - how to tokenizeparse string literals from javascript source code - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745514905a2661481.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论