【问题标题】:Replace text in HTML using Classic ASP使用经典 ASP 替换 HTML 中的文本
【发布时间】:2012-11-02 02:00:44
【问题描述】:

我不确定 Classic ASP (VBscript) 是否可行,但我想做的是:

在 HTML 文本中搜索特定字符串(仅在 p-tags、div-tags、li-tags、span-tags 之间并忽略其他标签(如 a-tags)之间的文本)并将其替换为其他内容。例如:

原始 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 中。

【问题讨论】:

  • 哇...好问题。您能否在同一个问题中也添加 PHP。想在PHP中做。 :)
  • 这相当复杂——你正在编写一个解析器。这对于 StackOverflow 问题来说有点过于宽泛了。
  • 您应该能够使用正则表达式来做到这一点。 VBScript RegExp 对象的参考和支持的语法在这里:regular-expressions.info/vbscript.html

标签: html asp-classic replace


【解决方案1】:

这里需要字符串操作.. 因为我从来没有真正接触过正则表达式,所以我很久以前就带着一堆我自己的方法来以各种方式操作文本。相当丑陋,不是最好的效率,但它确实有效。

首先,将这些函数添加到您的代码中:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 2012-01-26
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多