\<SCRIPT\s+language=["']*javascript["']*\s+src=["']*(([a-zA-Z0-9_-]+)[.](js))["']*\>\</script\>
上面的正则是我简单的改写的能够匹配:
我怎么获取1111.js呢?也就是(([a-zA-Z0-9_-]+)[.](js))匹配的内容。怎么做呢?我从html中得到了<script language=javascript src=></script>
,怎么做可以得到(([a-zA-Z0-9_-]+)他匹配的内容。
上面的正则是我简单的改写的能够匹配:
我怎么获取1111.js呢?也就是(([a-zA-Z0-9_-]+)[.](js))匹配的内容。怎么做呢?我从html中得到了<script language=javascript src=></script>
,怎么做可以得到(([a-zA-Z0-9_-]+)他匹配的内容。
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["src"].Value;
}
这句话,你给的,不能做到完全,可以匹配很多。
Regex reg = new Regex(@"(?is)<script[^>]*?src=(['""]?)(?<src>[^'""\s>]+\.js)\1[^>]*>\s*</script>");还是说一定要带language=javascript
Regex reg = new Regex(@"(?is)<script\s+language=javascript[^>]*?src=(['""]?)(?<src>[^'""\s>]+\.js)\1[^>]*>\s*</script>");
string str = "<script language=javascript src=abcd.js></script>"; Regex regex = new Regex("<script\\s*language=['\"]?javascript['\"]?\\s*src=['\"]?(?<src>[^'\"\\s>]*)", RegexOptions.IgnoreCase | RegexOptions.Compiled);
Match match = regex.Match(str);
if (match.Success)
{
for (int i = 0; i < match.Groups.Count; i++)
{
Console.WriteLine(match.Groups[i]);
}
}
string str = "<script language=javascript src=abcd.js></script>"; Regex regex = new Regex("<script\\s*language=['\"]?javascript['\"]?\\s*src=['\"]?(?<src>[^'\"\\s>]*)></script>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
Match match = regex.Match(str);
if (match.Success)
{
for (int i = 0; i < match.Groups.Count; i++)
{
Console.WriteLine(match.Groups[i]);
}
}
(?s) 单行模式,表示小数点“.”可以匹配任意字符
那些如<srcipt、src=之类的固定字符没什么好解释的
[^>]*? 不是“>”的任意字符,0个或任意多个,这里使用非贪婪模式,是因为<script与src=之间的字符一般来说比较少,如果用贪婪模式匹配到“>”再进行回溯,效率比较低,所以使用了非贪婪模式
(['""]?)和后面的反向引用\1,作用是限制这里出现的标点配对出现,由于html语言要求并不严格,所以src=后面可以不加标点,也可以加“'”或“"”,这里是为了适配这三种可能情况的
(?<src>Expression) 命名捕获组,把表达式Expression匹配到的内容捕获到src组中,以备后面引用
[^'""\s>]和[^>] 排除型捕获组就不用解释了吧