我有一个包含一些HTML源代码的文本文件。我想检查文本文件是否包含“给定脚本”。举个例子:
让这是脚本......
_siteid = "bac29411-930d-43b2-8aab-0ec92fb7ab24";
_subscriberId = "03aab4ac-8f05-42d6-b51b-55f7abcdc092";
function comCC24StartFunctioning(scriptSource)
{
var scrDynamicHeadAttr = document.createElement('script');
scrDynamicHeadAttr.setAttribute('src', scriptSource);
scrDynamicHeadAttr.setAttribute('type', 'text/javascript');
scrHeadAttr = document.getElementsByTagName('head')[0];
scrHeadAttr.insertBefore(scrDynamicHeadAttr, scrHeadAttr.firstChild);
}
答案 0 :(得分:2)
我不会说这是一个正则表达式的工作,问题要么太简单,要么太复杂,取决于“包含给定脚本”的含义。
如果您的意思是包含字符匹配的逐字字符,则可以使用String.IndexOf。
如果脚本的格式可能不同,您可以通过删除所有空格然后再执行String.IndexOf来逃脱。
但是如果你的意思是一个脚本具有相同的行为,但可能有不同的结构,变量名等,那么你需要解析HTML和javascript并分析那些非常复杂的语法树。
另一种选择可能是只查找脚本中较小的不变部分,例如,再次使用String.IndexOf搜索“comCC24StartFunctioning”。
答案 1 :(得分:1)
如果我理解正确,您只想在整个文件中搜索确切的代码段?那么以下应该有效:
string fileName = "your HTML file location";
string textToSearch = "your-script-snippet";
bool fileContainsScript = System.IO.File.ReadAllText(fileName).Contains(textToSearch);
答案 2 :(得分:0)
一种方法是从脚本和HTML源代码中删除换行符。那么你基本上有两个字符串,需要看一个是否是另一个字符串的一部分。
答案 3 :(得分:0)
最简单的方法是使用String类的Contains()方法。如果可能有一些额外的空格或换行符,您可以根据您的字符串构建一个正则表达式模式并查找匹配项。要做到这一点,你必须转义正则表达式引擎认为“特殊”的所有字符,例如可能出现在脚本中的()[]。*等,并用\ s *替换模式字符串中的白色字符
string scriptToFind = ...
string fileToSearchText = ...
string patternToFind = Regex.Replace(@patternToFind, @"(\*|\.|\\|\(|\)|\[|\]|\{|\}|\+)",@"\$1"); // those aren't all special regex characters that need to be escaped
patternToFind = Regex.Replace(@scriptToFind, @"\s+",@"\s*");
bool isMatch = Regex.IsMatch(@fileToSearchText,@patternToFind);
用于测试目的:http://gskinner.com/RegExr/