การจัดการหลายบรรทัดใน Regular Expressions ของ JavaScript
Regular expressions เมื่อทำงานกับสตริงหลายบรรทัด มีลักษณะเฉพาะของตัวเอง มาทำความเข้าใจกัน โดยใช้ตัวอย่างสตริงต่อไปนี้ ซึ่งมีอักขระทั่วไป อักขระขึ้นบรรทัดใหม่ และแท็บ:
let str = `111
222
333
444`;
การขึ้นบรรทัดใหม่
อักขระขึ้นบรรทัดใหม่สามารถ
จับได้ด้วยคำสั่ง '\n':
let res = str.replace(/\n/g, '!');
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้ (ช่องว่างระหว่างบรรทัดคือแท็บ):
`111! 222! 333! 444`;
แท็บ
อักขระแท็บสามารถ
จับได้ด้วยคำสั่ง '\t':
let res = str.replace(/\t/g, '!');
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
`
111
!222
!333
!444
`;
การทำงานของจุด
คำสั่ง '.' สำหรับสตริงหลายบรรทัด
จะไม่จับอักขระขึ้นบรรทัดใหม่:
let res = str.replace(/./g, '!');
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
`
!!!
!!!!
!!!!
!!!!
`;
อักขระใดๆ
เพื่อจับอักขระทั้งหมดในสตริงหลายบรรทัด
ใช้เทคนิคพิเศษคือ
การรวม [\s\S] โครงสร้างนี้จะหา
อักขระทั่วไปทั้งหมดและอักขระขึ้นบรรทัดใหม่ทั้งหมด:
let res = str.replace(/[\s\S]/g, '!');
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
`!!!!!!!!!!!!!!!!!!`;
เครื่องหมาย caret (^)
ด้วยตัวปรับแต่ง 'm'
สามารถเปิดโหมดหลายบรรทัดได้
ในกรณีนี้ เครื่องหมาย caret จะจับ
จุดเริ่มต้นของแต่ละบรรทัด:
let res = str.replace(/^/gm, '!');
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
`
!111
!222
!333
!444
`;
เครื่องหมายดอลลาร์ ($)
คำสั่ง '
ในโหมดหลายบรรทัด
จะจับจุดสิ้นสุดของแต่ละบรรทัด:
let res = str.replace(/$/gm, '!');
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
`
111!
222!
333!
444!
`;
โจทย์ปฏิบัติ
ให้สตริง:
`
abc
def
ghi
jkl
`;
เขียน regular expression ที่จะทำให้ สตริงนี้กลายเป็นดังนี้:
`
abc!
def!
ghi!
jkl!
`;
ให้สตริง:
`
abc
def
ghi
jkl
`;
เขียน regular expression ที่จะทำให้ สตริงนี้กลายเป็นดังนี้:
`
! abc
! def
! ghi
! jkl
`;
ให้สตริง:
`
abc
def
ghi
jkl
`;
เขียน regular expression ที่จะทำให้ สตริงนี้กลายเป็นดังนี้:
`!
abc
def
ghi
jkl
!`;
ให้สตริง:
`
abc
def
ghi
jkl
`;
เขียน regular expression ที่จะทำให้ สตริงนี้กลายเป็นดังนี้:
`!
! abc
! def
! ghi
! jkl
!`;
ให้สตริง:
`
abc
def
ghi
jkl
`;
เขียน regular expression ที่จะทำให้ สตริงนี้กลายเป็นดังนี้:
`!
abc!
def!
ghi!
jkl!
!`;
ให้สตริง:
`
abc
def
ghi
jkl
`;
เขียน regular expression ที่จะทำให้ สตริงนี้กลายเป็นดังนี้:
`
!abc
!def
!ghi
!jkl
`;