アプリ版:「スタンプのみでお礼する」機能のリリースについて

' VBSでのhtmlタグ要素名の置換
' htmlファイルのタグ名を小文字に統一するスクリプトを作りたいと思っています。
' で、以下のスクリプトを書きました。(問題は置換処理だけなので要点をシンプルに抜き出しました)
' 要素名をすべて記述するのではなく、「<[A-Z]+」等のように記述してヒットした結果を
' 小文字化するなどして置換をおこないたいと思っています。
' (将来的には属性名も対応したいと思っています)
' ずばりそのものの記述・代替案等を希望しています。
' よろしくお願いします。
' ※可能ならコードonlyで会話しましょう。

Option Explicit

Dim reg
Set reg = New RegExp


Function replace(bodyStr, beforeStr, afterStr)
reg.Pattern = beforeStr
reg.Global = True
replace = reg.Replace(bodyStr, afterStr)
End Function


Dim fileText
fileText = "<HTML>HTML</HTML>"

' 要素名の小文字化
' fileText = replace(fileText, "<HTML+", "<html")
' fileText = replace(fileText, "</HTML", "</html")
fileText = replace(fileText, "<[A-Z]+", LCase(RegExp.$1))


If fileText = "<html>HTML</html>" Then
MsgBox "期待通り!"
Else
MsgBox "これじゃダメだよ…orz:" + fileText
End If

A 回答 (2件)

VBSの場合は RegExpのExecuteでMatchesコレクションを取得して処理します



Dim objMatchColl, objMatch
Set objMatchColl = Reg.Execute( fileText )
for each objMatch in objMatchColl
  Reg.Replace(fileText, LCase( objMatch ) )
next
といった具合でしょう

入れ子になったタグを処理したいなら patternを "<([A-Z].*?)>(.*?)<\/\1>"などとして
if objMatchColl.Count > 1 then
' 再帰呼び出しで objMatchColl(1)を処理する
end if
といった処理が必要になってくるでしょう
    • good
    • 0
この回答へのお礼

なるほど。for each のほうがスマートですね。
参考になりました。ありがとうございました。

お礼日時:2009/05/22 01:09

>問題は置換処理だけなので要点をシンプルに抜き出しました


とのことですが、お示しのコードを実行すると、「RegExp.$1」のところでエラーになってしまって、よく分かりませんので、下記の様になコードを書いて実行してみました。
 ご参考になれば幸いです。

Option Explicit
Dim reg
Set reg = New RegExp
Dim beforeStr
beforeStr = InputBox("HTML タグを入力してください。", "htmlタグ要素名の置換")
With reg
.Pattern = "<[^ >]*"
.Global = True
End With
Dim fileText
Set fileText = reg.Execute(beforeStr)
Dim i, afterStr
afterStr = beforeStr
For i = 0 To fileText.Count - 1
afterStr = replace(afterStr, fileText(i), LCase(fileText(i)))
Next
MsgBox afterStr
    • good
    • 0
この回答へのお礼

>「RegExp.$1」のところでエラーになってしまって、

これはJScriptでの書き方です。
もし両方わかる人だったらすぐに伝わるだろうと思って書きました。
なんとなく意図を伝えようとしているだけでVB系のコードとしては
特に意味はありません。


教えていただいたコードでやりたいことは達成できました。
また、最初に私が考えていた方法では無理そうということもわかりました。

参考になりました。
ありがとうございました。

お礼日時:2009/05/19 15:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!