Biểu thức chính quy JavaScript là gì

Biểu thức chính quy là nỗi sợ hãi của nhiều lập trình viên. Những cái gì khó nhớ, ít làm, lập trình viên sẽ Google, Stack Overflow cho nhanh. Chạy được là ok còn không cần hiểu và nhớ kỹ làm gì cho mệt. Dần dần, ai cũng dùng Biểu thức chính quy nhưng chả có mấy ai hiểu quy tắc viết Biểu thức chính quy. Trong bài viết này tôi chia sẻ nhiều quy tắc để hiểu và ghi nhớ Biểu thức chính quy

1. Biểu thức chính quy là gì?

Biểu thức chính quy là kỹ thuật viết biểu thức để tìm chuỗi tìm kiếm trùng lặp theo yêu cầu. Regular = thông thường, Expression = biểu thức. Chúng ta tạm gọi nó là biểu thức thông thường hoặc vài nơi gọi là biểu thức chính quy. Còn lại tôi gọi đơn giản là regex. Mọi ngôn ngữ lập trình đều hỗ trợ regex. Ứng dụng của regex

  • Tra cứu dữ liệu hợp lệ. email, số điện thoại
  • Tìm các chuỗi phù hợp trong một chuỗi lớn theo biểu thức. Thay vì so sánh từng ký tự mà sử dụng biểu thức, cái mới là sức mạnh của regex

Để học hiệu quả Regex nhanh, hãy thực hiện tôi xin giới thiệu một số nguồn

  • Regex tuyệt vời. liên kết các nguồn, tài liệu học regex
  • regex101. công cụ trực tuyến để viết và thử regex
  • Học Regex thật đơn giản
  • Bảng tính Regex
  • Top 15 Regex thường được sử dụng

Một biểu thức regex đầy đủ sẽ bao gồm hai phần

  • Phần biểu thức (biểu thức). chúng ta cần phải viết
  • Cờ phần điều khiển cách tìm chuỗi tìm kiếm phù hợp (flags). chỉ cần chọn cho phù hợp

Biểu thức chính quy JavaScript là gì

2. Giải thích

2. 0 Flags - control flags

Please try this example

/^Chào thế giới/gmui

https. //regex101. com/r/8ZC0sc/1

Giải thích

  • g. toàn cầu
  • m. nhiều dòng
  • u. unicode
  • i. trường hợp không nhạy cảm

2. 1 Matching Symbol - biểu tượng để khớp

Biểu thứcGiải thích. Khớp với mọi ký tự^helloKhớp chuỗi ở đầu dònghello$Khớp chuỗi ở cuối dòngXYX tiếp theo đó phải Y[abc]Khớp 1 ký tự hoặc a hoặc.
/\bcountr(y|ies)\b/gmi
1 định nghĩa một dải các lựa chọn[abc][xy]Ký tự đầu hoặc a hoặc b hoặc c, nối tiếp theo là ký tự x hoặc y\bhello\bDanh sách bổ sung mới. Matchmatch must be a from chứ không phải là string with[^abc]_
/\bcountr(y|ies)\b/gmi
2 overlay stripe next by. Là bất kỳ ký tự nào không phải là a hoặc b hoặc (màu. color)Hoặc
/\bcountr(y|ies)\b/gmi
3 hoặc
/\bcountr(y|ies)\b/gmi
4.
/\bcountr(y|ies)\b/gmi
5 group of characters to a blockcount(y. tức là)Hoặc
/\bcountr(y|ies)\b/gmi
6 hoặc
/\bcountr(y|ies)\b/gmi
7

2. 2 Meta character - Ký tự đại diện

Các ký tự Giải thích\ Bất kỳ chữ số nào [0-9]\DKý tự không phải chữ số [^0-9]\sKý tự cách khoảng trắng\wKý tự [a-zA-Z_0-9]\WKý tự kh , not \w

2. 3 Quantifier - đếm số lần khớp

Biểu tượngGiải thích*Xuất hiện 0 đến nhiều lần. Tương đương {0,}+Xuất hiện 1 đến nhiều lần. Tương đương {1,}?Xuất hiện 0 hoặc 1 lần. Tương đương {0,1}{X}Xuất hiện X lần{X,Y}Xuất hiện từ X đến Y lần

2. 4 Dải /\bcountr(y|ies)\b/gmi1 và Nhóm /\bcountr(y|ies)\b/gmi5

Phạm vi

/\bcountr(y|ies)\b/gmi
1 tạo ra một dải lựa chọn. ví dụ

  • /\bcountr(y|ies)\b/gmi
    11. hoặc
    /\bcountr(y|ies)\b/gmi
    12 hoặc
    /\bcountr(y|ies)\b/gmi
    13
  • /\bcountr(y|ies)\b/gmi
    14 một ký tự bất kỳ nằm trong dải
    /\bcountr(y|ies)\b/gmi
    15 đến
    /\bcountr(y|ies)\b/gmi
    16
  • /\bcountr(y|ies)\b/gmi
    17 cũng không khác gì so với
    /\bcountr(y|ies)\b/gmi
    18. Việc bổ sung các ký tự HOẶC
    /\bcountr(y|ies)\b/gmi
    19 trong
    /\bcountr(y|ies)\b/gmi
    1 không có tác dụng gì

Nhóm

/\bcountr(y|ies)\b/gmi
5 nhóm các ký tự bên trong thành một khối

  • /\bcountr(y|ies)\b/gmi
    22. group ký tự tạo thành phần mở rộng tệp. Sử dụng thêm
    /\bcountr(y|ies)\b/gmi
    19 để tạo ra các lựa chọn kết nối bằng OR
  • /\bcountr(y|ies)\b/gmi
    5 may be contain
    /\bcountr(y|ies)\b/gmi
    1 and many character, biểu tượng bên trong

3. Thực hiện theo tình huống

Vui lòng sử dụng Regex101 để viết regex và xem kỹ giải thích. Ở đây tôi dùng từ

/\bcountr(y|ies)\b/gmi
26 có nghĩa là
/\bcountr(y|ies)\b/gmi
27.
/\bcountr(y|ies)\b/gmi
28 có nghĩa là
/\bcountr(y|ies)\b/gmi
29

Trong các biểu thức regex dưới đây, phần cuối cùng của

/\bcountr(y|ies)\b/gmi
00 chính là điều khiển cờ

3. 1 Canmatch any string contains /\bcountr(y|ies)\b/gmi6 there is /\bcountr(y|ies)\b/gmi7

/\bcountr(y|ies)\b/gmi

https. //regex101. com/r/iKoIaX/1

Giải thích

  • /\bcountr(y|ies)\b/gmi
    03 start the expression
  • Điều khiển cờ
    /\bcountr(y|ies)\b/gmi
    00. g (tìm kiếm toàn cầu) tìm tất cả các chuỗi phù hợp, m (multilines) tìm trên nhiều dòng, i (không phân biệt chữ hoa chữ thường) không quan tâm chữ hoa chứ thường
  • /\bcountr(y|ies)\b/gmi
    05. match character
    /\bcountr(y|ies)\b/gmi
    06 or string
    /\bcountr(y|ies)\b/gmi
    07

3. 2 Số di động ở Việt nam bao gồm 10 đến 11 chữ số

Request

  • Có từ 10-11 chữ số
  • Phải có chữ số 0 đầu tiên
________mười một

https. //regex101. com/r/YjmkFm/1

Giải thích

  • /\bcountr(y|ies)\b/gmi
    08. ranh giới từ yêu cầu chuỗi khớp phải là một từ đầy đủ chứ không phải chuỗi có. Chúng ta phải chặn hai đầu chuỗi di động bằng
    /\bcountr(y|ies)\b/gmi
    08

  • /\bcountr(y|ies)\b/gmi
    20. first number must be number 0

  • /\bcountr(y|ies)\b/gmi
    21. một ký tự nằm trong danh sách từ
    /\bcountr(y|ies)\b/gmi
    20 đến
    /\bcountr(y|ies)\b/gmi
    23

  • /\bcountr(y|ies)\b/gmi
    24. number of numbers from 9 to 10 characters

3. 3 Kiểm tra email có hợp lệ không

/\bcountr(y|ies)\b/gmi
2

Đây là regex tôi lấy nguyên từ Stack Overflow mà không chút nghĩ ngợi. Link running try here https. //regex101. com/r/rtuOuV/1

3. 4 hà nội, hà lội, hà nội

Cần tìm tất cả các từ hà nội, hà lội, hà nội, hà nội, hà nội

/\bcountr(y|ies)\b/gmi
0

https. //regex101. com/r/WRIeeX/1

Giải thích

  • Luôn luôn phải chặn hai đầu biểu thức bằng
    /\bcountr(y|ies)\b/gmi
    08 để yêu cầu chuỗi đối sánh phải là một từ đầy đủ chứ không phải chuỗi có
  • Sử dụng phạm vi
    /\bcountr(y|ies)\b/gmi
    26,
    /\bcountr(y|ies)\b/gmi
    27 để chấp nhận các ký tự có dấu và không dấu
  • Sử dụng phạm vi
    /\bcountr(y|ies)\b/gmi
    11 để chấp nhận khi có người nói nhầm lẫn giữa
    /\bcountr(y|ies)\b/gmi
    12 với
    /\bcountr(y|ies)\b/gmi
    13

3. 5 Tên. xxx,Họ. yyyy

Tomatch string has format FirstName.

/\bcountr(y|ies)\b/gmi
51,Họ.
/\bcountr(y|ies)\b/gmi
52. Giữa FirstName. and
/\bcountr(y|ies)\b/gmi
51 has 0 or many white distance

Giữa Họ. and

/\bcountr(y|ies)\b/gmi
52 has 0 or many white distance

/\bcountr(y|ies)\b/gmi
2

https. //regex101. com/r/arUAJw/1

Giải thích

  • /\bcountr(y|ies)\b/gmi
    08. start a word

  • /\bcountr(y|ies)\b/gmi
    56. có 0 hoặc nhiều khoảng trắng

  • /\bcountr(y|ies)\b/gmi
    57. character group [a-zA-Z_0-9]

3. 6 Có tệp ảnh

Cần tìm ra tất cả các tên tệp ảnh có đuôi png, jpeg, jpg, gif

/\bcountr(y|ies)\b/gmi
5

https. //regex101. com/r/XRyE7d/2/

Giải thích

  • ________ 558 buộc chuỗi cần tìm kiếm phải có phần mở rộng bao gồm hoặc

    /\bcountr(y|ies)\b/gmi
    59 hoặc
    /\bcountr(y|ies)\b/gmi
    60 hoặc
    /\bcountr(y|ies)\b/gmi
    61 hoặc
    /\bcountr(y|ies)\b/gmi
    62

3. 7 Địa chỉ IPv4 aaa. bbb. ccc. đđ

Địa chỉ IPv4 bao gồm 4 khối cách nhau bằng 3 dấu

/\bcountr(y|ies)\b/gmi
63 ví dụ. 192. 168. 1. 1, có 127. 0. 0. 1

/\bcountr(y|ies)\b/gmi
6

https. //regex101. com/r/hjKDOX/1

Sắp xếp khác hơn, mỗi khối không vượt qua được 255

/\bcountr(y|ies)\b/gmi
1

https. //regex101. com/r/ypHIfa/1

3. 8 địa chỉ http. // hoặc https. //

/\bcountr(y|ies)\b/gmi
2

https. //regex101. com/r/N3R9M0/1/

3. 9 Chuỗi năm-tháng-ngày

/\bcountr(y|ies)\b/gmi
0

https. //regex101. com/r/FbqI8q/1

Giải thích

  • /\bcountr(y|ies)\b/gmi
    64. Ký tự đầu tiên của năm phải là
    /\bcountr(y|ies)\b/gmi
    65 hoặc
    /\bcountr(y|ies)\b/gmi
    66. Còn lâu mới đến năm 3xxx
  • /\bcountr(y|ies)\b/gmi
    67. Tiếp theo đó là 3 chữ số còn lại của năm
  • /\bcountr(y|ies)\b/gmi
    68. nhóm chữ số có thể xuất hiện trong tháng có 2 khả năng
    • ngày 10.
      /\bcountr(y|ies)\b/gmi
      69. 01.02,. .09
    • tàu 10.
      /\bcountr(y|ies)\b/gmi
      10. 11, 12
  • /\bcountr(y|ies)\b/gmi
    11. the group number may ngày có 3 khả năng
    • ngày 10.
      /\bcountr(y|ies)\b/gmi
      69
    • 11 ngày 29 tháng giêng.
      /\bcountr(y|ies)\b/gmi
      13
    • 30 đến 31.
      /\bcountr(y|ies)\b/gmi
      14

Kết luận

Biểu thức thông thường - Regex giúp bạn xử lý chuỗi, tìm kiếm, kiểm tra hợp lệ một cách nhanh chóng, dễ dàng. Một ngôn ngữ lập trình ngôn ngữ có thể không hỗ trợ lớp (go), không hỗ trợ chung (go), không hỗ trợ phản chiếu (c ++), không hỗ trợ kiểu rô bốt (kiểu vịt) nhưng nếu không thể trở thành một language setting. By handle number and string is hai thao tác tối thiểu cần thiết trong mọi ngôn ngữ lập trình

Regex không khó hiểu. Bạn có thể quên regex nhưng một khi đã hiểu và xem lại Cheat sheet, cùng với nguyên mẫu công cụ biểu thức https. //regex101. com/ bạn có thể tạo regex trong 15 phút

Cần phải nhớ rằng, biểu thức regex không thể đảm bảo mọi trường hợp. Ví dụ trường hợp

/\bcountr(y|ies)\b/gmi
15, Regex sẽ chấp nhận chuỗi
/\bcountr(y|ies)\b/gmi
16. Thực tế không thể có ngày 31 trong tháng 2, nhưng trong Regex chúng ta không thể viết logic để xử lý trường hợp này. Tỷ lệ khớp (matching) càng chính xác thì biểu thức regex càng dài, càng phức tạp, càng khó gỡ lỗi và tốn thời gian khi chạy. Do đó, bạn cần kết hợp viết thành 2 cấp độ. lần đầu tiên sử dụng regex, lần thứ hai sử dụng logic mã để xử lý các ngoại lệ rất phức tạp

Lập trình Regex thật là đơn giản phải không các bạn. Hãy chịu khó vào blog Techmaster để xem và đóng góp bài viết nhé