正規表示式用於解析HTML下的Javascript標籤與程式碼
最近有一個作業,必須解析HTML下的Javascript寫法,並且進行相關的重組作業,這個直覺上就馬上想到了正規表示式(Regular Expression),將相關的資訊紀錄在此,以利日後查找方便。
進行Javascript標籤的解析
Javascript相關的標籤,可能會出現下列這些寫法:
<script src="/js/jQuery.js"></script>
<script src="/js/jQuery.js" async></script>
<script type="text/javascript">
var cTemp1 = "ABCD";
</script>
<script>
var cTemp2 = "EFGH";
</script>
我們可以用下面的正規表示式來解決這個問題:
public static void Main()
{
string cSource =
@"
<script src=""/js/jQuery.js""></script>
<script src=""/js/jQuery.js"" async></script>
<script type=""text/javascript"">
var cTemp1 = ""ABCD"";
</script>
<script>
var cTemp2 = ""EFGH"";
</script>
這裡不是正確的寫法,這段文字會被過濾掉!
";
string cRegExp = @"(<script[\s\S]*?>)([\s\S]*?)(<\/script>)";
foreach (System.Text.RegularExpressions.Match oItem in System.Text.RegularExpressions.Regex.Matches(cSource, cRegExp, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
Console.WriteLine(
string.Format(
"I Found: {0} | {1} | {2}",
oItem.Groups[1],
oItem.Groups[2],
oItem.Groups[3]
)
);
}
}
輸出結果:
I Found: <script src="/js/jQuery.js"> | | </script>
I Found: <script src="/js/jQuery.js" async> | | </script>
I Found: <script type="text/javascript"> |
var cTemp1 = "ABCD";
| </script>
I Found: <script> |
var cTemp2 = "EFGH";
| </script>
解析script內部的src路徑
另外一個需要處理的工作就是解析script標籤裡面的src路徑,這部分的工作是想要把這些路徑字串取出後,進行某些程度的加工後再寫回,這部分同樣需要正規表示式來協助我們進行處理。
Javascript標籤內部的src,可能會出現下列這些寫法:
<script src="/index.php"></script>
<script src="/index.php" async></script>
<script src = "/index.php" async></script>
我們可以用下面的正規表示式來解決這個問題:
public static void Main()
{
string cSource =
@"
<script src=""/index.php""></script>
<script src=""/index.php"" async></script>
<script src = ""/index.php"" async> </script>
這裡不是正確的寫法!
";
string cRegExp = @"(<script[\s\S]*?)src\s*=\s*""(.*?)""([\s\S]*?>)";
foreach (System.Text.RegularExpressions.Match oItem in System.Text.RegularExpressions.Regex.Matches(cSource, cRegExp, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
Console.WriteLine(
string.Format(
"I Found: {0} | {1} | {2}",
oItem.Groups[1],
oItem.Groups[2],
oItem.Groups[3]
)
);
}
}
輸出結果:
I Found: <script | /index.php | >
I Found: <script | /index.php | async>
I Found: <script | /index.php | async>
以上正規表示式之拆解方式,提供給大家參考。