VBScript - นิพจน์ทั่วไป
Regular Expressions คือลำดับของอักขระที่สร้างรูปแบบซึ่งส่วนใหญ่จะใช้สำหรับการค้นหาและแทนที่ จุดประสงค์ของการสร้างรูปแบบคือการจับคู่สตริงเฉพาะเพื่อให้ผู้พัฒนาสามารถแยกอักขระตามเงื่อนไขและแทนที่อักขระบางตัวได้
RegExp วัตถุ
วัตถุ RegExp ช่วยให้นักพัฒนาจับคู่รูปแบบของสตริงและคุณสมบัติและวิธีการช่วยให้เราทำงานกับนิพจน์ทั่วไปได้อย่างง่ายดาย คล้ายกับ RegExp ใน JavaScript
คุณสมบัติ
Pattern - วิธี Pattern แสดงถึงสตริงที่ใช้เพื่อกำหนดนิพจน์ทั่วไปและควรตั้งค่าก่อนที่จะใช้อ็อบเจ็กต์นิพจน์ทั่วไป
IgnoreCase- คุณสมบัติบูลีนที่แสดงว่านิพจน์ทั่วไปควรถูกทดสอบกับการจับคู่ที่เป็นไปได้ทั้งหมดในสตริงถ้าเป็นจริงหรือเท็จ หากไม่ได้ระบุไว้อย่างชัดเจนค่า IgnoreCase จะถูกตั้งค่าเป็น False
Global- คุณสมบัติบูลีนที่แสดงว่าควรทดสอบนิพจน์ทั่วไปกับการจับคู่ที่เป็นไปได้ทั้งหมดในสตริงหรือไม่ หากไม่ได้ระบุไว้อย่างชัดเจนค่า Global จะถูกตั้งค่าเป็น False
วิธีการ
Test(search-string) - วิธีการทดสอบรับสตริงเป็นอาร์กิวเมนต์และส่งกลับค่า True หากนิพจน์ทั่วไปสามารถจับคู่กับสตริงได้สำเร็จมิฉะนั้นจะส่งคืน False
Replace(สตริงการค้นหาแทนที่สตริง) - วิธีการแทนที่ใช้ 2 พารามิเตอร์ หากการค้นหาประสบความสำเร็จจะแทนที่สิ่งที่ตรงกับสตริงการแทนที่และสตริงใหม่จะถูกส่งกลับ หากไม่มีรายการที่ตรงกันระบบจะส่งคืนสตริงการค้นหาเดิม
Execute(สตริงการค้นหา) - เมธอด Execute ทำงานเหมือนแทนที่ยกเว้นว่าจะส่งคืนอ็อบเจ็กต์คอลเลคชัน Matches ซึ่งมีอ็อบเจ็กต์ Match สำหรับการแข่งขันที่สำเร็จ ไม่แก้ไขสตริงเดิม
จับคู่วัตถุคอลเลกชัน
อ็อบเจ็กต์คอลเลกชันที่ตรงกันจะถูกส่งกลับเป็นผลลัพธ์ของเมธอด Execute วัตถุคอลเลกชันนี้สามารถมีวัตถุที่ตรงกันหรือมากกว่าและคุณสมบัติของวัตถุนี้เป็นแบบอ่านอย่างเดียว
Count - วิธีการนับแทนจำนวนของวัตถุที่ตรงกันในคอลเลกชัน
Item - เมธอดไอเทมช่วยให้สามารถเข้าถึงอ็อบเจ็กต์การจับคู่จากอ็อบเจ็กต์คอลเลคชัน
จับคู่วัตถุ
วัตถุที่ตรงกันมีอยู่ภายในวัตถุคอลเลกชันที่ตรงกัน วัตถุเหล่านี้แสดงถึงการจับคู่ที่ประสบความสำเร็จหลังจากการค้นหาสตริง
FirstIndex- แสดงถึงตำแหน่งภายในสตริงเดิมที่เกิดการจับคู่ ดัชนีนี้เป็นศูนย์ซึ่งหมายความว่าตำแหน่งแรกในสตริงคือ 0
Length - ค่าที่แสดงถึงความยาวทั้งหมดของสตริงที่ตรงกัน
Value- ค่าที่แสดงถึงค่าหรือข้อความที่ตรงกัน นอกจากนี้ยังเป็นค่าเริ่มต้นเมื่อเข้าถึงวัตถุที่ตรงกัน
ทุกอย่างเกี่ยวกับ Pattern Parameter
รูปแบบการสร้างคล้ายกับ PERL การสร้างรูปแบบเป็นสิ่งที่สำคัญที่สุดในขณะที่ทำงานกับนิพจน์ทั่วไป ในส่วนนี้เราจะจัดการกับวิธีการสร้างรูปแบบตามปัจจัยต่างๆ
การจับคู่ตำแหน่ง
ความสำคัญของการจับคู่ตำแหน่งคือเพื่อให้แน่ใจว่าเราวางนิพจน์ทั่วไปในตำแหน่งที่ถูกต้อง
สัญลักษณ์ | คำอธิบาย |
---|---|
^ | จับคู่เฉพาะจุดเริ่มต้นของสตริง |
$ | จับคู่เฉพาะส่วนท้ายของสตริง |
\ b | ตรงกับขอบเขตคำใด ๆ |
\ B | ตรงกับขอบเขตที่ไม่ใช่คำใด ๆ |
การจับคู่ตัวอักษร
อักขระในรูปแบบใด ๆ เช่นตัวอักษรตัวเลขหรืออักขระพิเศษหรือแม้แต่ทศนิยมฐานสิบหกสามารถถือเป็นตัวอักษรได้ เนื่องจากอักขระเพียงไม่กี่ตัวมีความหมายพิเศษในบริบทของนิพจน์ทั่วไปอยู่แล้วเราจึงจำเป็นต้องหลีกเลี่ยงโดยใช้ลำดับการหลีกเลี่ยง
สัญลักษณ์ | คำอธิบาย |
---|---|
ตัวอักษรและตัวเลข | จับคู่อักขระตามตัวอักษรและตัวเลขเท่านั้น |
\ n | จับคู่บรรทัดใหม่ |
\ [ | ตรงกับ [ตามตัวอักษรเท่านั้น |
\] | ตรงกัน] ตามตัวอักษรเท่านั้น |
\ ( | ตรงกัน (ตามตัวอักษรเท่านั้น |
\) | ตรงกัน) ตามตัวอักษรเท่านั้น |
\ t | จับคู่แท็บแนวนอน |
\ v | จับคู่แท็บแนวตั้ง |
\ | | ตรงกัน | ตามตัวอักษรเท่านั้น |
\ { | ตรงกับ {ลิเทอรัลเท่านั้น |
\} | ตรงกับตัวอักษรเท่านั้น |
\\ | จับคู่ \ ตามตัวอักษรเท่านั้น |
\? | ตรงกัน? ตามตัวอักษรเท่านั้น |
\ * | ตรงกับ * ตัวอักษรเท่านั้น |
\ + | ตรงกับตัวอักษรเท่านั้น |
\. | ตรงกัน ตามตัวอักษรเท่านั้น |
\ b | ตรงกับขอบเขตคำใด ๆ |
\ B | ตรงกับขอบเขตที่ไม่ใช่คำใด ๆ |
\ ฉ | จับคู่ฟีดแบบฟอร์ม |
\ r | จับคู่การกลับรถ |
\ xxx | จับคู่อักขระ ASCII ของเลขฐานแปด xxx |
\ xdd | จับคู่อักขระ ASCII ของเลขฐานสิบหก dd |
\ uxxxx | จับคู่อักขระ ASCII ของ UNICODE ลิเทอรัล xxxx |
การจับคู่คลาสตัวละคร
คลาสอักขระคือรูปแบบที่เกิดจากการจัดกลุ่มที่กำหนดเองและอยู่ภายในเครื่องหมายปีกกา [] หากเราคาดหวังว่าคลาสอักขระที่ไม่ควรอยู่ในรายการเราควรละเว้นคลาสอักขระนั้นโดยใช้สัญลักษณ์ลบซึ่งก็คือหมวก ^
สัญลักษณ์ | คำอธิบาย |
---|---|
[xyz] | จับคู่คลาสอักขระใด ๆ ที่อยู่ในชุดอักขระ |
[^ xyz] | จับคู่คลาสอักขระใด ๆ ที่ไม่ได้อยู่ในชุดอักขระ |
. | จับคู่คลาสอักขระใด ๆ ยกเว้น \ n |
\ w | จับคู่คลาสอักขระคำใดก็ได้ เทียบเท่ากับ [a-zA-Z_0-9] |
\ ว | จับคู่คลาสอักขระที่ไม่ใช่คำใด ๆ เทียบเท่ากับ [^ a-zA-Z_0-9] |
\ d | จับคู่คลาสหลักใดก็ได้ เทียบเท่ากับ [0-9] |
\ D | จับคู่คลาสอักขระที่ไม่ใช่ตัวเลข เทียบเท่ากับ [^ 0-9] |
\ s | จับคู่คลาสอักขระช่องว่างใด ๆ เทียบเท่ากับ [\ t \ r \ n \ v \ f] |
\ S | จับคู่คลาสอักขระช่องว่างใด ๆ เทียบเท่ากับ [^ \ t \ r \ n \ v \ f] |
การจับคู่ซ้ำ
การจับคู่ซ้ำทำให้สามารถค้นหาได้หลายรายการภายในนิพจน์ทั่วไป นอกจากนี้ยังระบุจำนวนครั้งที่องค์ประกอบซ้ำในนิพจน์ทั่วไป
สัญลักษณ์ | คำอธิบาย |
---|---|
* | จับคู่เหตุการณ์ที่เกิดขึ้นเป็นศูนย์หรือมากกว่าของนิพจน์ทั่วไปที่กำหนด เทียบเท่ากับ {0,} |
+ | จับคู่เหตุการณ์หนึ่งหรือหลายครั้งของนิพจน์ทั่วไปที่กำหนด เทียบเท่ากับ {1,} |
เหรอ? | ตรงกับศูนย์หรือหนึ่งครั้งของนิพจน์ทั่วไปที่กำหนด เทียบเท่ากับ {0,1} |
{x} | จับคู่ x จำนวนครั้งที่เกิดขึ้นของนิพจน์ทั่วไปที่ระบุ |
{x,} | จับคู่ atleast x หรือมากกว่าที่เกิดขึ้นของนิพจน์ทั่วไปที่กำหนด |
{x, y} | จับคู่จำนวน x ถึง y ของการเกิดขึ้นของนิพจน์ทั่วไปที่กำหนด |
การสลับและการจัดกลุ่ม
การสลับและการจัดกลุ่มช่วยให้นักพัฒนาสามารถสร้างนิพจน์ทั่วไปที่ซับซ้อนมากขึ้นในการจัดการกับประโยคที่ซับซ้อนโดยเฉพาะภายในนิพจน์ทั่วไปซึ่งให้ความยืดหยุ่นและการควบคุมที่ดีเยี่ยม
สัญลักษณ์ | คำอธิบาย |
---|---|
0 | การจัดกลุ่มคำสั่งเพื่อสร้างอนุประโยค "(xy)? (z)" ตรงกับ "xyz" หรือ "z" |
| | Alternation รวมประโยคนิพจน์ทั่วไปหนึ่งประโยคจากนั้นจับคู่คำสั่งใด ๆ ของแต่ละประโยค "(ij) | (23) | (pq)" ตรงกับ "ij" หรือ "23" หรือ "pq" |
การสร้างนิพจน์ทั่วไป
ด้านล่างเป็นตัวอย่างบางส่วนที่อธิบายวิธีสร้างนิพจน์ทั่วไปอย่างชัดเจน
นิพจน์ทั่วไป | คำอธิบาย |
---|---|
"^ \ s * .. " และ ".. \ s * $" | แสดงว่าสามารถมีอักขระเว้นวรรคนำหน้าและต่อท้ายจำนวนเท่าใดก็ได้ในบรรทัดเดียว |
"((\ $ \ s?) | (# \ s?))?" | แทนเครื่องหมาย $ หรือ # ที่เป็นทางเลือกตามด้วยช่องว่าง |
"((\ d + (\. (\ d \ d)?)?))" | แสดงว่ามีอย่างน้อยหนึ่งหลักตามด้วยทศนิยมที่เป็นทางเลือกและสองหลักหลังทศนิยม |
ตัวอย่าง
ตัวอย่างด้านล่างตรวจสอบว่าผู้ใช้ป้อนรหัสอีเมลที่มีรูปแบบควรตรงหรือไม่โดยมีรหัสอีเมลตามด้วย "@" แล้วตามด้วยชื่อโดเมน
<!DOCTYPE html>
<html>
<body>
<script language = "vbscript" type = "text/vbscript">
strid = "[email protected]"
Set re = New RegExp
With re
.Pattern = "^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$"
.IgnoreCase = False
.Global = False
End With
' Test method returns TRUE if a match is found
If re.Test( strid ) Then
Document.write(strid & " is a valid e-mail address")
Else
Document.write(strid & " is NOT a valid e-mail address")
End If
Set re = Nothing
</script>
</body>
</html>