ตัวดำเนินการกำหนดจำนวนครั้งของอักขระ
มีสถานการณ์ที่เราต้องการระบุว่า
อักขระถูกทำซ้ำตามจำนวนครั้งที่กำหนด
หากเรารู้จำนวนครั้งที่แน่นอนของการทำซ้ำ
ก็สามารถเขียนมันหลายครั้งได้เลย
- /aaaa/. แต่จะทำอย่างไรหากเราต้องการ
บอกว่า: ทำซ้ำหนึ่งครั้งหรือมากกว่านั้น?
สำหรับสิ่งนี้มีตัวดำเนินการ (quantifiers)
ในการทำซ้ำ: เครื่องหมายบวก + (หนึ่งครั้งหรือมากกว่า)
เครื่องหมายดอกจัน * (ศูนย์ครั้งหรือมากกว่า) และ
เครื่องหมายคำถาม ? (ศูนย์ครั้งหรือหนึ่งครั้ง) ตัวดำเนินการเหล่านี้
จะมีผลกับอักขระที่อยู่ก่อนหน้าพวกมัน
มาดูการทำงานของตัวดำเนินการเหล่านี้ จากตัวอย่างกัน
ตัวอย่าง
มาหาบรรดาสตริงย่อยทั้งหมดตามรูปแบบ ตัวอักษร
'x', ตัวอักษร 'a' หนึ่งครั้งหรือมากกว่า
ตัวอักษร 'x':
let str = 'xx xax xaax xaaax xbx';
let res = str.replace(/xa+x/g, '!');
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'xx ! ! ! xbx'
ตัวอย่าง
มาหาบรรดาสตริงย่อยทั้งหมดตามรูปแบบ ตัวอักษร
'x', ตัวอักษร 'a' ศูนย์ครั้งหรือมากกว่า
ตัวอักษร 'x':
let str = 'xx xax xaax xaaax xbx'
let res = str.replace(/xa*x/g, '!');
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'! ! ! ! xbx'
ตัวอย่าง
มาหาบรรดาสตริงย่อยทั้งหมดตามรูปแบบ ตัวอักษร
'x', ตัวอักษร 'a' ศูนย์ครั้งหรือหนึ่งครั้ง
ตัวอักษร 'x':
let str = 'xx xax xaax xbx';
let res = str.replace(/xa?x/g, '!');
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'! ! xaax xbx'
โจทย์ฝึกปฏิบัติ
กำหนดสตริง:
let str = 'aa aba abba abbba abca abea';
เขียน regular expression ที่จะค้นพบสตริง
'aba', 'abba', 'abbba'
ตามรูปแบบ: ตัวอักษร 'a', ตัวอักษร 'b'
จำนวนครั้งใดๆ, ตัวอักษร 'a'.
กำหนดสตริง:
let str = 'aa aba abba abbba abca abea';
เขียน regular expression ที่จะค้นพบสตริง
'aa', 'aba', 'abba',
'abbba' ตามรูปแบบ: ตัวอักษร 'a',
ตัวอักษร 'b' จำนวนครั้งใดๆ (รวมถึง
ศูนย์ครั้ง), ตัวอักษร 'a'.
กำหนดสตริง:
let str = 'aa aba abba abbba abca abea';
เขียน regular expression ที่จะค้นพบสตริง
'aa', 'aba' ตามรูปแบบ: ตัวอักษร
'a', ตัวอักษร 'b' หนึ่งครั้งหรือ
ศูนย์ครั้ง, ตัวอักษร 'a'.
กำหนดสตริง:
let str = 'aa aba abba abbba abca abea';
เขียน regular expression ที่จะค้นพบสตริง
'aa', 'aba', 'abba',
'abbba', โดยไม่ดึง 'abca'
และ 'abea'.