30/09/2019, 08:29

JavaScript Regular Expressions: Thanh xuân như mẫu `ri gêch`

Thanh xuân như mẫu ri gệc =)) Viết xong một mẫu thanh xuân không còn Regular Expressions hay Regex thì chắc cũng không xa lạ gì với các anh em dev. Nhưng với mình, cái này khá là đau đầu. Thực sự mỗi lần làm regex là như mò kim đáy bể vậy . Hôm vừa rồi nghịch ngợm, mình có tìm ...

Thanh xuân như mẫu ri gệc =))
Viết xong một mẫu thanh xuân không còn

Regular Expressions hay Regex thì chắc cũng không xa lạ gì với các anh em dev. Nhưng với mình, cái này khá là đau đầu. Thực sự mỗi lần làm regex là như mò kim đáy bể vậy . Hôm vừa rồi nghịch ngợm, mình có tìm được một vài cái hay hay nên mình viết bài viết này. Hi vọng có thể giúp đỡ anh em cũng bị bệnh “đau đầu” giống mình có thể viết regex dễ dàng hơn xíu ahihi =))

1. Giới thiệu về Regex

Nói qua một chút nhé, Regex (Regular Expressions), tạm dịch là “biểu thức chính quy” là một cách hiệu quả để làm việc với dữ liệu dạng chuối (string). Bằng cách tạo một regex, bạn có thể làm một số việc như:

  • Tìm kiếm một đoạn văn bản
  • Trích rút một đoạn văn bản
  • Thay thế một đoạn văn bản bằng một đoạn văn bản khác

Hầu hết các ngôn ngữ lập trình đều sử dụng được regex. Nhưng trong bài hôm nay, mình sẽ nói về regex với ngôn ngữ cụ thể là javascript.

Cú pháp chung

trong đó:

  • pattern là chuỗi regex
  • modifiers (có thể có hoặc không) là options so khớp, bao gồm:

Ví dụ

Để tạo một regex trong js thì bạn có thể dùng 2 cách

  • Cách 1: tạo 1 object RegExp
  • Cách 2: sử dụng cú pháp //

Đây là một ví dụ đơn giản. Biểu thức reg được định nghĩa dùng để tìm kiếm các đoạn văn bản có chứa chuỗi hello, không phân biệt chữ hoa chữ thường. Bạn có thể dùng hàm RegExp.test(String) để kiểm tra xem đoạn văn bản đang xét có chứa reg mà bạn định nghĩa hay không.

  9 tip cho các Javascript Developer trong năm 2019

  Sự khác nhau giữa deep copy và shallow copy trong JavaScript

2. Một vài systax cần nhớ

Brackets

Metacharacters

Quantifiers

Ví dụ

  • Kí hiệu ^, khớp chuỗi bắt đầu bằng hello
  • Kí hiệu $, khớp chuỗi kết thúc bằng hello
  • Và khi chúng ta kết hợp ^ và $ chúng ta sẽ có 1 yêu cầu khớp chuỗi chính xác với từ hello:
  • Kí hiệu *, dùng để khớp với bất kì kí tự nào xuất hiện 0 lần trở lên ???
  • Kí hiệu |, dùng để khớp với 2 hoặc nhiều chuỗi khác nhau
  • Kí hiệu +, so khớp 1 kí tự xuất hiện nhiều hơn 1 lần

nhưng nếu là *, ta sẽ có true, true nhé

  • KÍ hiệu ?, lại so khớp cho kí hiệu không xuất hiện hoặc xuất hiện duy nhất 1 lần
  • {n}, khớp chuỗi có kí tự xuất hiện đúng n lần:
  • {m, n}, cái này thì là xuất hiện từ m đến n lần, không ít hơn m lần và không nhiều quá n lần
  • Dấu ngoặc tròn (...), để tạo các nhóm kí tự. Bằng cách này bạn có thể quy ước số lần lặp lại của một chuỗi thay vì một kí tự.

3. Các hàm js regex bạn nên biết

Ví dụ

  • String.match(RegExp) và RegExp.exec(String)

Hai hàm khớp chuỗi này sẽ trả về mảng (Array) các chuỗi con khớp với mẫu regex. Trường hợp không có chuỗi khớp, hàm sẽ trả về kết quả null

  • String.replace(RegExp, closure): Đây là một hàm khá hay ho nè.

Bình thường bạn có hay dùng String.replace(String s1, String s2)? và truyền vào 2 string để thay thế những đoạn văn bản s1 xuất hiện trong chuỗi bằng đoạn văn bản s2

nhưng bạn cũng có thể truyền regex để thay thế cácđoạn văn bản có cấu trúc như regex bạn định nghĩa, để thay thế các các đoạn văn bản đó bằng một chuỗi khác.

hoặc truyền 1 closure để xử lý tại mỗi vị trí có đoạn văn bản cần sửa đổi. Hàm này cho phép bạn kết hợp hàm match() và replace().

Trên đây là một số điều mình mới tìm hiểu được về Regular Expressions. Hi vọng bài viết của mình giúp ích một chút cho các bạn. Cảm ơn đã bạn đọc bài viết của mình. Hẹn gặp lại bạn ở những bài viết tiếp theo.

TechTalk via Viblo

0