JavaScript үндэс / Тогтмол илэрхийлэл (RegExp)

Тогтмол илэрхийлэл (RegExp)

Regular Expression буюу RegExp нь текст дотроос тодорхой загварт тохирох хэсгийг олох, шалгах, орлуулах хэл юм. Жишээ нь и-мэйл хаяг зөв эсэхийг шалгах, утасны дугаараас тоонуудыг ялгаж авах, эсвэл текст дотрых бүх огноог олох — бүгдийг RegExp-ээр хийж болно. Эхэндээ нууцлаг харагддаг боловч суурь дүрмийг ойлгосоор байхад уншиж, бичиж сурна.

RegExp хэрхэн бичих вэ?

JavaScript-д regex-г хоёр урагш налуу зураасны хооронд бичнэ: /загвар/тугнууд. Эсвэл new RegExp("загвар") ашиглаж болно.

javascript
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 — олон мөрт текстэд ^ $ тэмдгийг мөр бүрд хэрэглэнэ

Үндсэн дүрэм ба тусгай тэмдгүүд

javascript
// . — ямар ч нэг тэмдэгт
/х.р/.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). Доорх жишээнд и-мэйл, утасны дугаар шалгана:

javascript
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() методуудтай хамтран хэрэглэх нь маш хүчирхэг:

javascript
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(цэвэрлэсэн); // "Утас: ***, нөөц: ***"
javascript
// Бүлэг (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) зэрэг ойлголтуудыг үзнэ.