Тогтмол илэрхийлэл (RegExp)
Regular Expression буюу RegExp нь текст дотроос тодорхой загварт тохирох хэсгийг олох, шалгах, орлуулах хэл юм. Жишээ нь и-мэйл хаяг зөв эсэхийг шалгах, утасны дугаараас тоонуудыг ялгаж авах, эсвэл текст дотрых бүх огноог олох — бүгдийг RegExp-ээр хийж болно. Эхэндээ нууцлаг харагддаг боловч суурь дүрмийг ойлгосоор байхад уншиж, бичиж сурна.
RegExp хэрхэн бичих вэ?
JavaScript-д regex-г хоёр урагш налуу зураасны хооронд бичнэ: /загвар/тугнууд. Эсвэл new RegExp("загвар") ашиглаж болно.
const загвар = /сайн/; // "сайн" гэсэн үг хайна
const загвар2 = /сайн/i; // i тугны ачаар том/жижиг үсэг хамаарахгүй
const загвар3 = /сайн/g; // g тугны ачаар бүх тохирлыг олно
const мөр = "Сайн уу! Сайн байна уу?";
console.log(загвар2.test(мөр)); // true
console.log(мөр.match(/сайн/gi)); // ["Сайн", "Сайн"]
Хамгийн түгээмэл тугнууд:
i— том/жижиг үсгийг ялгахгүй (case-insensitive)g— бүх тохирлыг хайна (global)m— олон мөрт текстэд^$тэмдгийг мөр бүрд хэрэглэнэ
Үндсэн дүрэм ба тусгай тэмдгүүд
// . — ямар ч нэг тэмдэгт
/х.р/.test("хар") // true
/х.р/.test("хор") // true
/х.р/.test("хр") // false — дунд нь нэг тэмдэгт байх ёстой
// ^ — мөрийн эхлэл, $ — мөрийн төгсгөл
/^Сайн/.test("Сайн уу"); // true
/^Сайн/.test("Уу, Сайн"); // false
/байна$/.test("Сайн байна"); // true
// \d — тоон тэмдэгт, \w — үсэг/тоо/доогуур зураас
// \s — хоосон зай, + — нэг ба түүнээс дээш
const утасны = /^\+976\d{8}$/;
console.log(утасны.test("+97699112233")); // true
console.log(утасны.test("+97699-1234")); // false
Бодит жишээнүүд
RegExp-ийн хамгийн их хэрэгтэй газар бол маягт шалгалт (form validation). Доорх жишээнд и-мэйл, утасны дугаар шалгана:
function имэйл_шалгах(имэйл) {
const загвар = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return загвар.test(имэйл);
}
console.log(имэйл_шалгах("bold@example.mn")); // true
console.log(имэйл_шалгах("bold@")); // false
console.log(имэйл_шалгах("example.com")); // false
replace() ба match() методуудтай хамтран хэрэглэх нь маш хүчирхэг:
const текст = "Утас: 9911-2233, нөөц: 9922-3344";
// Бүх утасны дугаарыг олох
const дугаарууд = текст.match(/\d{4}-\d{4}/g);
console.log(дугаарууд); // ["9911-2233", "9922-3344"]
// Зураасыг хоосон зайгаар орлуулах
const цэвэрлэсэн = текст.replace(/\d{4}-\d{4}/g, "***");
console.log(цэвэрлэсэн); // "Утас: ***, нөөц: ***"
// Бүлэг (capturing group) ашиглан огноо задлах
const огноо_загвар = /(\d{4})-(\d{2})-(\d{2})/;
const тохирол = "2025-07-15".match(огноо_загвар);
if (тохирол) {
const [_, жил, сар, өдөр] = тохирол;
console.log(`Жил: ${жил}, Сар: ${сар}, Өдөр: ${өдөр}`);
// Жил: 2025, Сар: 07, Өдөр: 15
}
RegExp-ийн бүх дүрмийг цээжлэх шаардлагагүй — мэргэжилтэн хөгжүүлэгчид ч гэсэн лавлагаа харж ашиглана. Гол зүйл бол механизмыг ойлгож, хэрэгтэй үедээ хайж олж ашиглах чадвар юм.
Дараагийн хичээлд:
Функциональ программчлал — map, filter, reduce-ыг дахин нэг шатаар гүнзгийрүүлж, цэвэр функц (pure function), хувьсашгүй байдал (immutability) зэрэг ойлголтуудыг үзнэ.