วันนี้ฉันพบปัญหา: วิธีเน้นคำหลักที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในหน้าเว็บ ตัวอย่างเช่น ข้อความ abcaBcabCaBCabcaBCa คำหลัก bc ในกรณีที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ มีทั้งหมด 6 รายการ
จากนั้นสิ่งที่แสดงบนหน้าเว็บคือ abcaBcabCaBCabcaBCa
หลายคนนึกถึงฟังก์ชันการแทนที่ ต้นแบบก็คือ
แทนที่(สตริง,ค้นหา,แทนที่ด้วย[,เริ่มต้น[,นับ[,เปรียบเทียบ]]])
สตริงที่ต้องการ นิพจน์สตริง ที่มีสตริงย่อยที่จะแทนที่
ค้นหาตัวเลือกที่ต้องการ สตริงย่อยที่กำลังค้นหา
จำเป็นต้องมีการแทนที่ด้วย ซึ่งเป็นสตริงย่อยที่ใช้สำหรับการแทนที่
start option ตำแหน่งที่จะเริ่มค้นหาสตริงย่อย ค่าเริ่มต้นคือ 1
นับเป็นทางเลือก จำนวนการแทนที่สตริงย่อยที่จะดำเนินการ ค่าเริ่มต้นคือ -1 ซึ่งระบุถึงการแทนที่ที่เป็นไปได้ทั้งหมด
เปรียบเทียบทางเลือก โหมดการเปรียบเทียบ 0: การเปรียบเทียบแบบไบนารี 1: การเปรียบเทียบข้อความ
แม้ว่าพารามิเตอร์ตัวสุดท้ายจะสามารถแก้ปัญหาความไม่คำนึงถึงขนาดตัวพิมพ์ได้ แต่ควรเปลี่ยนอะไรใหม่
เนื่องจากจากตัวอย่าง มีการค้นหา bc, Bc, bC และ BC ทั้งหมด แต่ไม่สามารถแทนที่ด้วยข้อความเดียวได้
ดังนั้นใช้ฟังก์ชัน Instr เพื่อช่วยเรา
ค้นหาจากสตริงต้นทางจากซ้ายไปขวาทุกครั้งที่พบรายการที่ตรงกัน เพียงทำตามสามขั้นตอน
1. ส่งออกสตริงทางด้านซ้ายของรายการที่ตรงกัน
2. ใช้รายการที่ตรงกันกับสไตล์ <span> แล้วส่งออก
3. ทำซ้ำสองขั้นตอนก่อนหน้าและค้นหาสตริงทางด้านขวาต่อไปจนกระทั่งสิ้นสุดการค้นหา
รหัสมีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่นสาธารณะ HighLight(S,F)
สลัว tL,tM,tR,k
ทีแอล=
ทีเอ็ม=
tR=ส
k=instr(1,tR,F,1)
ทำในขณะที่ k>0
tL=tL & ซ้าย(tR,k-1)
tM=กลาง(tR,k,เลน(F))
tL=tL & <span style='color:red'> & tM & </span>
tR=ขวา(tR,เลน(tR)-เลน(F)-k+1)
k=instr(1,tR,F,1)
วนซ้ำ
ไฮไลท์=tL & tR
ฟังก์ชั่นสิ้นสุด
เมื่อโทรจะมีรหัสดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
tS=abcaBcabCaBCabcaBCa
tF=bc
การตอบสนองเขียน(tS)
ตอบกลับ เขียน(<br/>)
การตอบสนองเขียน (HighLight (tS, tF))
ด้วยวิธีนี้ตัวอย่างในตอนต้นจะเป็นเช่นนั้น
ในทางกลับกัน ลองคิดว่าการใช้นิพจน์ทั่วไปจะสะดวกกว่าหรือไม่ พยายามหลายครั้งก็ไม่เกิดผล มาดูกันว่าผู้เชี่ยวชาญคนไหนใช้กฎปกติในการแก้ปัญหานี้
หลังจากเขียนบทความแล้ว ชาวเน็ต Yugong ได้ให้คำตอบกับนิพจน์ทั่วไป ทดสอบแล้วพบว่าถูกต้อง ตอนนี้รหัสของเขาถูกวางด้านล่าง ขอบคุณมากสำหรับเขา
รหัส
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชั่น ไฮไลท์(S,F)
Dim regEx
ตั้งค่า regEx = RegExp ใหม่
regEx.IgnoreCase = จริง
regEx.Global = จริง
regEx.Pattern = ( & F & )
HighLight = regEx.Replace(S,<span style='color:red'>$1</span>)
ฟังก์ชันสิ้นสุด
Response.write HighLight (abcaBcabCaBCabcaBCa,bc)