tek4

Regex trong JavaScript

by - September. 26, 2021
Kiến thức
Học
<p><img class="aligncenter wp-image-8261 size-full" src="https://tek4.vn/wp-content/uploads/2021/02/Capture-71.png" alt="Regex trong JavaScript" width="751" height="442" /></p> <p>Trong b&agrave;i viết n&agrave;y, ta sẽ c&ugrave;ng t&igrave;m hiểu về biểu thức ch&iacute;nh quy - Regex trong JavaScript c&ugrave;ng với sự trợ gi&uacute;p của c&aacute;c v&iacute; dụ dẫn chứng.</p> <h1>Regex trong JavaScript</h1> <p>Trong JavaScript, biểu thức ch&iacute;nh quy (Regex, viết tắt của từ Regular Expression) l&agrave; một đối tượng m&ocirc; tả một chuỗi c&aacute;c k&yacute; tự được sử dụng để định nghĩa cho một mẫu t&igrave;m kiếm.</p> <p>Một mẫu được x&aacute;c định bằng RegEx c&oacute; thể được sử dụng để t&igrave;m kiếm v&agrave; so khớp với một chuỗi k&yacute; tự.</p> <h2>Tạo một biểu thức ch&iacute;nh quy</h2> <p>C&oacute; hai c&aacute;ch m&agrave; ta c&oacute; thể tạo một biểu thức ch&iacute;nh quy trong JavaScript.</p> <h3>1. Sử dụng một hằng biểu thức ch&iacute;nh quy</h3> <p>Biểu thức ch&iacute;nh quy bao gồm một mẫu (chuỗi k&yacute; tự cần t&igrave;m) nằm giữa dấu gạch ch&eacute;o /.</p> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="js">let exp = /JavaScript/;</pre> <p>Ở đ&acirc;y, /JavaScript/ l&agrave; một biểu thức ch&iacute;nh quy.</p> <h3>2. Sử dụng h&agrave;m khởi tạo RegExp()</h3> <p>Ta cũng c&oacute; thể tạo một biểu thức ch&iacute;nh quy bằng c&aacute;ch gọi h&agrave;m khởi tạo <code class="EnlighterJSRAW" data-enlighter-language="generic">RegExp()</code>.</p> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="js">let exp = new RegExp('JavaScript');</pre> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="js">let exp = new RegExp(/JavaScript/); console.log(exp.test('JavaScript'));</pre> <p>Kết quả:</p> <pre>True</pre> <p>Trong v&iacute; dụ tr&ecirc;n, mẫu biểu thức ch&iacute;nh quy l&agrave; <code class="EnlighterJSRAW" data-enlighter-language="generic">/JavaScript/</code>. Ở đ&acirc;y, phương thức <code class="EnlighterJSRAW" data-enlighter-language="generic">test()</code>được sử dụng để kiểm tra xem chuỗi k&yacute; tự c&oacute; khớp với mẫu trong biểu thức ch&iacute;nh quy hay kh&ocirc;ng.</p> <h2>X&aacute;c định mẫu bằng RegEx</h2> <p>Để x&aacute;c định biểu thức ch&iacute;nh quy, c&aacute;c si&ecirc;u k&yacute; tự sẽ được sử dụng.</p> <h3>Si&ecirc;u k&yacute; tự</h3> <p>Si&ecirc;u k&yacute; tự l&agrave; c&aacute;c k&yacute; tự được c&ocirc;ng cụ RegEx diễn giải theo một c&aacute;ch đặc biệt. Sau đ&acirc;y l&agrave; danh s&aacute;ch c&aacute;c si&ecirc;u k&yacute; tự:</p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">[] . ^ $ * + ? {} () \ |</pre> <p><em>1. Dấu ngoặc vu&ocirc;ng []</em></p> <p>Dấu ngoặc vu&ocirc;ng chỉ định một tập hợp c&aacute;c k&yacute; tự ta muốn so khớp.</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="4">[xyz]</td> <td style="text-align: center;">x</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">xz</td> <td style="text-align: center;">2</td> </tr> <tr> <td style="text-align: center;">abc</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;">xyz ab yz</td> <td style="text-align: center;">5</td> </tr> </tbody> </table> <p>Ở đ&acirc;y, [xyz] sẽ tr&ugrave;ng khớp nếu chuỗi k&yacute; tự m&agrave; ta đang cố gắng so khớp chứa bất kỳ k&yacute; tự n&agrave;o bao gồm x, y hoặc z.</p> <p>Ta cũng c&oacute; thể chỉ định một loạt c&aacute;c k&yacute; tự bằng c&aacute;ch sử dụng k&yacute; hiệu <code class="EnlighterJSRAW" data-enlighter-language="generic">-</code>b&ecirc;n trong dấu ngoặc vu&ocirc;ng</p> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">[a-f] tương đương với [abcdef]. [1-9] tương đương với [123456789]. [0-39] tương đương với [01239].</pre> <p>Ta c&oacute; thể bổ sung tập hợp c&aacute;c k&yacute; tự bằng c&aacute;ch sử dụng biểu tượng dấu mũ <code class="EnlighterJSRAW" data-enlighter-language="generic">^</code>ở đầu dấu ngoặc vu&ocirc;ng.</p> <p><code class="EnlighterJSRAW" data-enlighter-language="generic">[^abc]</code> nghĩa l&agrave; bất kỳ k&yacute; tự n&agrave;o ngoại trừ a hoặc b hoặc c.</p> <p><code class="EnlighterJSRAW" data-enlighter-language="generic">[^0-9]</code> nghĩa l&agrave; bất kỳ k&yacute; tự kh&ocirc;ng phải chữ số.</p> <p><em>2. Dấu chấm</em></p> <p>Dấu chấm sẽ so khớp với bất kỳ k&yacute; tự đơn n&agrave;o (ngoại trừ k&yacute; tự xuống d&ograve;ng mới '\ n').</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="4">..</td> <td style="text-align: center;">a</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;">ac</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">abc</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">acde</td> <td style="text-align: center;">2 (chứa 4 k&yacute; tự)</td> </tr> </tbody> </table> <p><em>3. Dấu mũ</em></p> <p>K&yacute; hiệu dấu mũ ^ được sử dụng để kiểm tra xem một chuỗi k&yacute; tự c&oacute; bắt đầu bằng một k&yacute; tự được x&aacute;c định hay kh&ocirc;ng.</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="3">^x</td> <td style="text-align: center;">x</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">xyz</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">yxz</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;" rowspan="2">^ac</td> <td style="text-align: center;">abc</td> <td style="text-align: center;">0 (v&igrave; bắt đầu bằng a nhưng đằng sau lại l&agrave; b, kh&ocirc;ng phải l&agrave; c)</td> </tr> <tr> <td style="text-align: center;">acb</td> <td style="text-align: center;">1</td> </tr> </tbody> </table> <p><em>4. Dấu đ&ocirc;-la</em></p> <p>K&yacute; hiệu đ&ocirc; la $ được sử dụng để kiểm tra xem một chuỗi c&oacute; kết th&uacute;c bằng một k&yacute; tự được x&aacute;c định hay kh&ocirc;ng.</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="3">a$</td> <td style="text-align: center;">a</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">banana</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">ant</td> <td style="text-align: center;">0</td> </tr> </tbody> </table> <p><em>5. K&yacute; hiệu dấu ng&ocirc;i sao</em></p> <p>Biểu tượng ng&ocirc;i sao * khớp với số lần l&agrave; 0 hoặc nhiều lần xuất hiện của mẫu c&ograve;n lại.</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="5">ab*c</td> <td style="text-align: center;">ac</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">abc</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">abcc</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">abdc</td> <td style="text-align: center;">0 (v&igrave; đằng sau b kh&ocirc;ng phải l&agrave; c)</td> </tr> <tr> <td style="text-align: center;">deabc</td> <td style="text-align: center;">1</td> </tr> </tbody> </table> <p><em>6. Dấu cộng</em></p> <p>Biểu tượng dấu cộng + khớp với một hoặc nhiều lần xuất hiện của mẫu c&ograve;n lại.</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="5">ab+c</td> <td style="text-align: center;">abc</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">abcc</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">abbc</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">abdc</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;">defabc</td> <td style="text-align: center;">1</td> </tr> </tbody> </table> <p><em>7. Dấu hỏi chấm</em></p> <p>Biểu tượng dấu hỏi? khớp với 0 hoặc một lần xuất hiện của mẫu c&ograve;n lại.</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="4">ab?c</td> <td style="text-align: center;">abc</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">abdc</td> <td style="text-align: center;">0 (v&igrave; đằng sau b kh&ocirc;ng phải l&agrave; c)</td> </tr> <tr> <td style="text-align: center;">abcc</td> <td style="text-align: center;">0 (v&igrave; c&oacute; nhiều hơn 1 k&yacute; tự c)</td> </tr> <tr> <td style="text-align: center;">abec</td> <td style="text-align: center;">0 (v&igrave; đằng sau b kh&ocirc;ng phải l&agrave; c)</td> </tr> </tbody> </table> <p><em>8. Dấu ngoặc nhọn</em></p> <p>{n, m} l&agrave; &iacute;t nhất n v&agrave; nhiều nhất m lần lặp lại của mẫu.</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">&nbsp;Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="4">b{1,2}</td> <td style="text-align: center;">abbec</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">aec bbc</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">abc bcc</td> <td style="text-align: center;">2 (trong chuỗi abc v&agrave; bcc)</td> </tr> <tr> <td style="text-align: center;">aacb bbba</td> <td style="text-align: center;">2 (trong chuỗi aacb v&agrave; bbba)</td> </tr> </tbody> </table> <p><em>9. Dấu thanh dọc</em></p> <p>Thanh dọc | được sử dụng để chọn lựa một trong hai mẫu.</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="3">a|b</td> <td style="text-align: center;">cde</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;">ade</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">acdbea</td> <td style="text-align: center;">3</td> </tr> </tbody> </table> <p>Ở đ&acirc;y, a | b sẽ khớp với bất kỳ chuỗi n&agrave;o c&oacute; chứa k&yacute; tự a hoặc b</p> <p><em>10. Dấu ngoặc đơn</em></p> <p>Dấu ngoặc đơn () được sử dụng để nh&oacute;m c&aacute;c mẫu con. V&iacute; dụ: (a | b | c) xz khớp với bất kỳ chuỗi n&agrave;o c&oacute; chứa k&yacute; tự a hoặc b hoặc c v&agrave; theo sau l&agrave; xz</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp?</td> </tr> <tr> <td style="text-align: center;" rowspan="3">(a|b|c)kk</td> <td style="text-align: center;">ab kk</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;">akk</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">bck ckk</td> <td style="text-align: center;">2</td> </tr> </tbody> </table> <p><em>11. Dấu gạch ch&eacute;o ngược</em></p> <p>Dấu gạch ch&eacute;o ngược \ được sử dụng để tho&aacute;t c&aacute;c k&yacute; tự bao gồm tất cả c&aacute;c si&ecirc;u k&yacute; tự.</p> <p>V&iacute; dụ:</p> <p>\$a khớp nếu một chuỗi chứa k&yacute; tự $ theo sau l&agrave; a. Trong phần b&ecirc;n tr&ecirc;n, ta đ&atilde; n&oacute;i về k&yacute; hiệu đ&ocirc;-la n&agrave;y, k&yacute; hiệu đ&ocirc; la $ được sử dụng để kiểm tra xem một chuỗi c&oacute; kết th&uacute;c bằng một k&yacute; tự được x&aacute;c định hay kh&ocirc;ng. Tuy nhi&ecirc;n, ở đ&acirc;y, k&yacute; hiệu $ kh&ocirc;ng được c&ocirc;ng cụ RegEx bi&ecirc;n dịch theo c&aacute;ch đặc biệt n&agrave;y.</p> <p>Nếu ta kh&ocirc;ng chắc một k&yacute; tự c&oacute; &yacute; nghĩa đặc biệt hay kh&ocirc;ng, ta c&oacute; thể đặt dấu gạch ch&eacute;o ngược \ trước n&oacute;. Điều n&agrave;y đảm bảo rằng k&yacute; tự sẽ kh&ocirc;ng được xử l&yacute; theo một c&aacute;ch đặc biệt.</p> <h3>Chuỗi đặc biệt</h3> <p>C&aacute;c chuỗi đặc biệt gi&uacute;p cho c&aacute;c mẫu được viết dễ hơn. Sau đ&acirc;y l&agrave; danh s&aacute;ch c&aacute;c chuỗi đặc biệt:</p> <p><em>1. \A &ndash; Tr&ugrave;ng khớp nếu c&aacute;c k&yacute; tự được chỉ định nằm ở đầu chuỗi.</em></p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="2">\Athe</td> <td style="text-align: center;">theant</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">athea</td> <td style="text-align: center;">0</td> </tr> </tbody> </table> <p><em>2. \b &ndash; Tr&ugrave;ng khớp nếu c&aacute;c k&yacute; tự được chỉ định nằm ở đầu hoặc cuối một từ.</em></p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;">\bJava</td> <td style="text-align: center;">JavaScript</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;" rowspan="4">Java\b</td> <td style="text-align: center;">scriptJava</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">JavaScript</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;">the scriptJava program</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">the aJavaScript</td> <td style="text-align: center;">0</td> </tr> </tbody> </table> <p><em>3. \B - Ngược lại với \b. So khớp nếu c&aacute;c k&yacute; tự được chỉ định kh&ocirc;ng nằm ở đầu hoặc cuối của một từ.</em></p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;">\BJava</td> <td style="text-align: center;">JavaScript</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;" rowspan="4">Java\B</td> <td style="text-align: center;">a JavaScript</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">the Java</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;">aJava program</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;">theJavaScript</td> <td style="text-align: center;">1</td> </tr> </tbody> </table> <p><em>4. \d &ndash; Tr&ugrave;ng khớp với bất kỳ chữ số n&agrave;o. Tương đương với [0-9].</em></p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="2">\d</td> <td style="text-align: center;">12abc3</td> <td style="text-align: center;">3</td> </tr> <tr> <td style="text-align: center;">JavaScript</td> <td style="text-align: center;">0</td> </tr> </tbody> </table> <p><em>5. \D &ndash; Tr&ugrave;ng khớp với bất kỳ k&yacute; tự m&agrave; kh&ocirc;ng phải l&agrave; chữ số. Tương đương với [^ 0-9].</em></p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="2">\D</td> <td style="text-align: center;">1ab22@12</td> <td style="text-align: center;">3</td> </tr> <tr> <td style="text-align: center;">98753</td> <td style="text-align: center;">0</td> </tr> </tbody> </table> <p><em>6. \s &ndash; Tr&ugrave;ng khớp với c&aacute;c chỗ m&agrave; một chuỗi chứa bất kỳ k&yacute; tự khoảng trắng n&agrave;o. Tương đương với [\t \n \r \f \v].</em></p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="2">\s</td> <td style="text-align: center;">JavaScript Program</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">JavaScript</td> <td style="text-align: center;">0</td> </tr> </tbody> </table> <p><em>7. \S &ndash; Tr&ugrave;ng khớp với c&aacute;c chỗ m&agrave; trong đ&oacute; một chuỗi k&yacute; tự kh&ocirc;ng c&oacute; khoảng trắng. Tương đương với [^ \t&nbsp; \n \r \f \v].</em></p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="2">\S</td> <td style="text-align: center;">x y</td> <td style="text-align: center;">2</td> </tr> <tr> <td style="text-align: center;">&nbsp;</td> <td style="text-align: center;">0</td> </tr> </tbody> </table> <p><em>8. \w &ndash; Tr&ugrave;ng khớp với bất kỳ k&yacute; tự chữ v&agrave; số n&agrave;o (chữ số v&agrave; bảng chữ c&aacute;i). Tương đương với [a-zA-Z0-9_]. K&yacute; tự dấu _ cũng được coi l&agrave; k&yacute; tự chữ số.</em></p> <p>V&iacute; dụ:</p> <table style="width: 33.3009%;"> <tbody> <tr> <td style="width: 24.1722%; text-align: center;">Biểu thức</td> <td style="width: 28.8079%; text-align: center;">Chuỗi k&yacute; tự</td> <td style="width: 44.0397%; text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="width: 24.1722%; text-align: center;" rowspan="2">\w</td> <td style="width: 28.8079%; text-align: center;">98@":"a</td> <td style="width: 44.0397%; text-align: center;">3</td> </tr> <tr> <td style="width: 28.8079%; text-align: center;">@@@"</td> <td style="width: 44.0397%; text-align: center;">0</td> </tr> </tbody> </table> <p><em>9. \W &ndash; Tr&ugrave;ng khớp với bất kỳ k&yacute; tự n&agrave;o m&agrave; kh&ocirc;ng phải l&agrave; chữ v&agrave; số. Tương đương với [^ a-zA-Z0-9_]</em></p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="2">\W</td> <td style="text-align: center;">123@abc</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">123456789</td> <td style="text-align: center;">0</td> </tr> </tbody> </table> <p><em>10. \Z &ndash; Tr&ugrave;ng khớp nếu c&aacute;c k&yacute; tự được chỉ định nằm ở cuối chuỗi.</em></p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td style="text-align: center;">Biểu thức</td> <td style="text-align: center;">Chuỗi k&yacute; tự</td> <td style="text-align: center;">Khớp hay kh&ocirc;ng?</td> </tr> <tr> <td style="text-align: center;" rowspan="3">JavaScript\Z</td> <td style="text-align: center;">JavaScript</td> <td style="text-align: center;">1</td> </tr> <tr> <td style="text-align: center;">JavaScript Program</td> <td style="text-align: center;">0</td> </tr> <tr> <td style="text-align: center;">JavaScript Learning</td> <td style="text-align: center;">0</td> </tr> </tbody> </table> <p><strong><span style="background-color: #ffff00;">Ch&uacute; &yacute;: Để x&acirc;y dựng v&agrave; kiểm tra c&aacute;c biểu thức ch&iacute;nh quy, ta c&oacute; thể sử dụng c&aacute;c c&ocirc;ng cụ kiểm tra RegEx như regex101.</span></strong></p> <h2>C&aacute;c phương thức của biểu thức ch&iacute;nh quy - Regex trong JavaScript</h2> <p>Như đ&atilde; đề cập ở tr&ecirc;n, ta c&oacute; thể sử dụng phương thức RegExp() hoặc k&yacute; tự biểu thức ch&iacute;nh quy để tạo RegEx trong JavaScript. Trong JavaScript, ta c&oacute; thể sử dụng c&aacute;c biểu thức ch&iacute;nh quy với c&aacute;c phương thức RegExp() bao gồm test() v&agrave; exec(). Ngo&agrave;i ra c&ograve;n c&oacute; một số phương thức chuỗi cho ph&eacute;p ta truyền RegEx l&agrave;m tham số của n&oacute; bao gồm match(), replace(), search() v&agrave; split().</p> <table> <tbody> <tr> <td style="text-align: center;">Phương thức</td> <td style="text-align: center;">M&ocirc; tả</td> </tr> <tr> <td style="text-align: center;">exec()</td> <td>Thực hiện việc t&igrave;m kiếm trong một chuỗi k&yacute; tự v&agrave; trả về mảng. Trả về gi&aacute; trị NULL nếu kh&ocirc;ng t&igrave;m thấy bất kỳ mẫu n&agrave;o.</td> </tr> <tr> <td style="text-align: center;">test()</td> <td>Kiểm tra sự tr&ugrave;ng khớp trong một chuỗi k&yacute; tự v&agrave; trả về true hoặc false.</td> </tr> <tr> <td style="text-align: center;">match()</td> <td>Trả về một mảng chứa tất cả c&aacute;c gi&aacute; trị khớp hoặc trả về NULL nếu ngược lại.</td> </tr> <tr> <td style="text-align: center;">matchAll()</td> <td>Trả về 1 đối tượng lặp chứa tất cả c&aacute;c gi&aacute; trị khớp.</td> </tr> <tr> <td style="text-align: center;">search()</td> <td>Kiểm tra một gi&aacute; trị khớp trong một chuỗi k&yacute; tự v&agrave; trả về chỉ số của gi&aacute; trị khớp đ&oacute;. Trả về -1 nếu kh&ocirc;ng t&igrave;m thấy gi&aacute; trị khớp.</td> </tr> <tr> <td style="text-align: center;">replace()</td> <td>T&igrave;m một gi&aacute; trị khớp trong một chuỗi k&yacute; tự v&agrave; thay thế chuỗi đ&atilde; khớp với một chuỗi kh&aacute;c.</td> </tr> <tr> <td style="text-align: center;">split()</td> <td>Chia một chuỗi k&yacute; tự th&agrave;nh một mảng c&aacute;c chuỗi k&yacute; tự con.</td> </tr> </tbody> </table> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="js">const str = 'Lập tr&igrave;nh JavaScript'; const match = /Java/; const kq1 = str.search(match); console.log(kq1); const str1 = 'Lập tr&igrave;nh Java'; str1.replace(match, 'JavaScript'); console.log(str1); const match2 = /[\s,]+/; const kq2 = str.split(match2); console.log(kq2);</pre> <p>Kết quả:</p> <pre>10 Lập tr&igrave;nh Java ['Lập', 'tr&igrave;nh', 'JavaScript']</pre> <h2>C&aacute;c cờ trong biểu thức ch&iacute;nh quy</h2> <p>Cờ được sử dụng với c&aacute;c biểu thức ch&iacute;nh quy nhằm cho ph&eacute;p c&aacute;c t&ugrave;y chọn kh&aacute;c nhau như t&igrave;m kiếm to&agrave;n cục, t&igrave;m kiếm kh&ocirc;ng c&oacute; ph&acirc;n biệt chữ hoa chữ thường,&hellip;</p> <table> <tbody> <tr> <td style="text-align: center;">Cờ</td> <td style="text-align: center;">M&ocirc; tả</td> </tr> <tr> <td style="text-align: center;">g</td> <td>Thực hiện t&igrave;m kiếm to&agrave;n cục.</td> </tr> <tr> <td style="text-align: center;">m</td> <td>Thực hiện so khớp nhiều d&ograve;ng.</td> </tr> <tr> <td style="text-align: center;">i</td> <td>Thực hiện so khớp kh&ocirc;ng ph&acirc;n biệt chữ hoa v&agrave; chữ thường.</td> </tr> </tbody> </table> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="js">const str = 'Lập tr&igrave;nh JavaScript v&agrave; Java + Java'; const kq = str.replace(/Java/, 'JavaScript'); console.log(kq); const kq2 = str.replace(/Java/g, 'JavaScript'); console.log(kq2); const kq3 = str.replace(/Java/i, 'JavaScript'); console.log(kq3); const kq4 = str.replace(/Java/gi, 'JavaScript'); console.log(kq4);</pre> <p>Kết quả:</p> <pre>Lập tr&igrave;nh JavaScriptscript v&agrave; Java + Java Lập tr&igrave;nh JavaScriptscript v&agrave; JavaScript + JavaScript Lập tr&igrave;nh JavaScriptscript v&agrave; Java + Java Lập tr&igrave;nh JavaScriptscript v&agrave; JavaScript + JavaScript</pre> <p>V&iacute; dụ 2: Sử dụng Regex để kiểm tra t&iacute;nh hợp lệ của email.</p> <pre class="EnlighterJSRAW" data-enlighter-language="js">function check(email) { &nbsp;&nbsp;&nbsp; const match = /\S+@\S+\.\S+/g; &nbsp;&nbsp;&nbsp; let kq = match.test(email); &nbsp;&nbsp;&nbsp; if (kq) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; console.log('Hợp lệ!'); &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; else { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let other = prompt('Nhập lại email:'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; check(other); &nbsp;&nbsp;&nbsp; } } let email = prompt('Nhập email: '); check(email);</pre> <p>Kết quả:</p> <pre>Nhập email: &gt; hieu@gmail.com Hợp lệ!</pre> <p>Tr&ecirc;n đ&acirc;y l&agrave; kh&aacute;i niệm v&agrave; v&iacute; dụ cơ bản về biểu thức ch&iacute;nh quy hay Regex trong JavaScript. Hy vọng mọi người c&oacute; thể &aacute;p dụng v&agrave;o trong chương tr&igrave;nh của m&igrave;nh. Mọi người h&atilde;y tiếp tục theo d&otilde;i c&aacute;c b&agrave;i tiếp theo v&agrave; cập nhật c&aacute;c b&agrave;i tiếp theo về lập tr&igrave;nh JavaScript tr&ecirc;n <a href="http://tek4.vn">tek4</a> nh&eacute;!</p> <p>P/s: Cảm ơn mọi người đ&atilde; tin tưởng tek4!</p>