

ExcelVBAで、HTMLを自動出力するソフトを作っています。

リンクタグを全て別タグ(別ウインドウ)で開かせるように  
変換したいと思っています。また、セキュリティ対策に自動で  
rel=”noopener noreferrer”が追加されるようにしたいのですが、  
正規表現が不慣れなものでどのようにパターンを書けばいいのかが  
解りません。

HTML内のすべてのaタグでかまわないので、別タグで開くように書き換える  
コードを、パターン付きでお教えいただけますでしょうか。

よろしくお願いいたします。


CC BY-SA 4.0
2022-02-03T00:12:53.607
86106
2022-02-03T01:01:25.967
2022-02-03T00:14:40.093
3060
9374
question
html 正規表現 vba
VBA 正規表現でHTMLのリンクタグ(aタグ)の属性を、別タグにして『rel=”noopener noreferrer”』を付加するように変換したい。


正規表現は`"<a +"`で置換文字列は`"<a target=""_blank"" rel=""noopener
noreferrer"""`にすることで`<a target="_blank" rel="noopener noreferrer"
href=...`の形にできます。  
下記は少し発展させてhrefの後にtarget="_blank"などを追加する例です。  
なお元の文字列にtargetやrel属性が入っていた場合の判定処理は考慮していません。  
必要に応じて条件分岐などを追加してください。

**サンプルコード**

[code]

    Sub ボタン1_Click()
        Dim reg As Object
        Set reg = CreateObject("VBScript.RegExp")
    
        With reg
            .Pattern = "(<a.+?)(href\s*=\s*"".+?"")" 
            .IgnoreCase = True
            .Global = True
        End With
    
        Dim srcStr As String
        Dim newStr As String
        srcStr = "<a href=""http://hoge/"">a href=""ここは変換しない""</a>" + vbCrLf + _
        "<a href = ""http://fuga:1234?piyo""></a>" + vbCrLf + _
        "<a href=""http://foo"" target=""_blank"">この場合はtargetが重複する</a>" 
        newStr = reg.Replace(srcStr, "$1$2 target=""_blank"" rel=""noopener noreferrer""")
        MsgBox newStr
    End Sub
    
[/code]

**実行結果**

[code]

    ---------------------------
    Microsoft Excel
    ---------------------------
    <a href="http://hoge/" target="_blank" rel="noopener noreferrer">a href="ここは変換しない"</a>
    
    <a href = "http://fuga:1234?piyo" target="_blank" rel="noopener noreferrer"></a>
    
    <a href="http://foo" target="_blank" rel="noopener noreferrer" target="_blank">この場合はtargetが重複する</a>
    ---------------------------
    OK   
    ---------------------------
    
[/code]


CC BY-SA 4.0
2022-02-03T01:01:25.967
86108
2022-02-03T01:01:25.967
9820
86106
answer