今日、私は問題に遭遇しました。Web ページ内で大文字と小文字を区別しないキーワードを強調表示する方法です。たとえば、テキスト abcaBcabCaBCabcaBCa、キーワード bc、大文字と小文字を区別しない場合、合計 6 件の一致があります。
するとWebページに表示されるのはabcaBcabCaBCabcaBCaです。
多くの人はreplace関数を思い浮かべます。原型は
Replace(文字列,検索,置換[,開始[,カウント[,比較]]])
文字列は必須、文字列式、置換される部分文字列を含む
find 必須オプション、検索される部分文字列
replacewith は必須です。置換に使用される部分文字列
start オプション、部分文字列の検索を開始する位置、デフォルトは 1
count オプション。実行する部分文字列置換の数。デフォルトは -1 で、可能なすべての置換を示します。
比較オプション、比較モード、0: バイナリ比較、1: テキスト比較。
最後のパラメータは大文字と小文字を区別しない問題を解決できますが、何を置き換えるべきでしょうか?
この例では、bc、Bc、bC、BC がすべて検索されていますが、これらを一律に 1 つのテキストに置き換えることはできません。
そこで、Instr 関数を使用してください。
一致するものが見つかるたびに、ソース文字列を左から右に検索します。 3つのステップに従うだけ
1. 一致した項目の左側の文字列を出力します
2. 一致する項目をスタイル <span> に適用して出力します
3. 前の 2 つの手順を繰り返し、検索が終了するまで右側の文字列の検索を続けます。
コードは次のとおりです。
次のようにコードをコピーします。
パブリック関数 HighLight(S,F)
薄暗いtL、tM、tR、k
tL=
tM=
tR=S
k=instr(1,tR,F,1)
k>0の間行う
tL=tL & left(tR,k-1)
tM=mid(tR,k,len(F))
tL=tL & <span style='color:red'> & tM & </span>
tR=right(tR,Len(tR)-len(F)-k+1)
k=instr(1,tR,F,1)
ループ
ハイライト=tL & tR
終了関数
呼び出すときのコードは次のとおりです。
次のようにコードをコピーします。
tS=abcaBcabCaBCabcaBCa
tF=bc
応答.書き込み(tS)
応答.書き込み(<br/>)
応答.Write(HighLight(tS,tF))
このようにして、冒頭の例は次のようになります
一方で、正規表現を使用した方が便利かどうか考えてみませんか?何度か試しましたが結果はありませんでした。どの専門家がこの問題を解決するために通常のルールを使用しているかを見てみましょう。
記事を書いた後、ネチズン Yugong が正規表現の解決策を教えてくれました。テストの結果、正しいことが判明しました。彼のコードを以下に貼り付けます。彼には本当に感謝しています。
コード
次のようにコードをコピーします。
関数ハイライト(S,F)
ディム正規表現
正規表現 = 新しい正規表現を設定します
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = ( & F & )
HighLight = regEx.Replace(S,<span style='color:red'>$1</span>)
終了機能
Response.write HighLight(abcaBcabCaBCabcaBCa,bc)