3

これが Classic ASP (VBscript) でも可能かどうかはわかりませんが、やりたいことは次のとおりです。

HTML テキスト (p タグ、div タグ、li タグ、スパン タグの間のみ、a タグなどの他のタグの間のテキストは無視) 内の特定の文字列を検索し、別のものに置き換えます。例えば:

元の HTML

<p>Some text with the keyword.</p>

従来の ASP 関数

すべての p-tags、div-tags、span-tags、および li-tags の間でのみ HTML テキスト内のキーワードを検索しますが、a-tags などの他のタグの間のテキストは無視します。キーワードを別のものに置き換えます。

出力 HTML

<p>Some text with the <a href="someurl">keyword</a>.</p>

これが不可能な場合、これを行う他の方法はありますか? これを経験した人はいますか?

ただ明確にします。「キーワードを含むテキスト」-テキストはデータベースからのものではありません。これは簡単すぎるためです:)残念ながら、.aspファイルのHTMLにあります。

4

1 に答える 1

0

ここでは文字列操作が必要です..私は正規表現にあまり興味がなかったので、ずっと前にさまざまな方法でテキストを操作するための独自のメソッドをたくさん用意しました。かなり醜く、最高の効率ではありませんが、機能します。

まず、これらの関数をコードに追加します。

Function GetBetween(str, leftDelimeter, rightDelimeter)
    Dim tmpArr, result(), x
    tmpArr=Split(str, leftDelimeter)
    If UBound(tmpArr) < 1 Then
        GetBetween=Array() : Exit Function
    End If
    ReDim result(UBound(tmpArr)-1)
    For x=1 To UBound(tmpArr)
        result(x-1)=(Split(tmpArr(x), rightDelimeter))(0)
    Next
    Erase tmpArr
    GetBetween=result
End Function

Function ReplaceWholeWord(ByVal strText, strWord, strToReplaceWith)
    ReplaceWholeWord = strText
    If InStr(strText, strWord)<1 Then Exit Function

    'Text is only the word?
    If strText=strWord Then
        strText = Replace(strText, strWord, strToReplaceWith)
    Else  
        'Text starting with word?
        If InStr(strText, strWord & " ")=1 Then
            strText = strToReplaceWith & " " & Right(strText, Len(strText) - Len(strWord & " "))
        End If

        'Text ends with word?
        If Right(strText, Len(" " & strWord))=(" " & strWord) Then
            strText = Left(strText, Len(strText) - Len(" " & strWord)) & " " & strToReplaceWith
        End If

        'Text ends with word and a period?
        If Right(strText, Len(" " & strWord & "."))=(" " & strWord & ".") Then
            strText = Left(strText, Len(strText) - Len(" " & strWord & ".")) & " " & strToReplaceWith & "."
        End If

        'Replace between other words:
        strText = Replace(strText, " " & strWord & " ", " " & strToReplaceWith & " ")
    End If

    ReplaceWholeWord = strText
End Function

これらの関数を使用して、必要な方法でキーワードを置き換えるサンプル コードを次に示します。

Const KEYWORD = "keyword"
Dim strHTML, arrTagsToFind, x
Dim curItemsArray,  y, curItem
Dim curReplacedItem
arrTagsToFind = Array("p", "div")
strHTML = "<b>this keyword will not be replaced</b><p>Some text with the keyword.</p>keyword here won't be replaced too<p>Some other text with the keyword22 that is not whole word but end with keyword</p><div>keyword first</div>"
For x=0 To UBound(arrTagsToFind)
    curItemsArray = GetBetween(strHTML, "<" + arrTagsToFind(x) + ">", "</" + arrTagsToFind(x) + ">")
    For y=0 To UBound(curItemsArray)
        curItem = curItemsArray(y)
        curReplacedItem = ReplaceWholeWord(curItem, KEYWORD, "<a href=""#foo"">" & KEYWORD & "</a>")
        strHTML = Replace(strHTML, curItem, curReplacedItem)
    Next
Next
Response.Write(strHTML)
于 2012-11-14T15:13:29.843 に答える