正規表示式用於解析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>

以上正規表示式之拆解方式,提供給大家參考。

Javascript RegularExpression RegEx Script Src HTML