[{"data":1,"prerenderedAt":2540},["ShallowReactive",2],{"guide-common-regex-patterns":3},{"id":4,"title":5,"body":6,"date":2530,"description":2531,"extension":2532,"meta":2533,"navigation":2534,"path":2535,"readingTime":2536,"seo":2537,"stem":2538,"__hash__":2539},"guides\u002Fguides\u002Fcommon-regex-patterns.md","20 Regex Patterns Every Developer Needs — Reference Guide",{"type":7,"value":8,"toc":2504},"minimark",[9,14,18,21,25,28,39,154,176,194,198,201,208,328,332,335,342,448,454,458,461,468,597,601,604,611,730,745,749,752,759,834,838,841,848,957,964,968,971,1056,1060,1066,1073,1175,1179,1182,1189,1250,1274,1278,1281,1456,1460,1463,1470,1560,1566,1570,1573,1580,1675,1679,1682,1689,1776,1780,1783,1790,1847,1851,1854,1861,1948,1952,1955,1962,2025,2029,2032,2039,2141,2145,2148,2155,2239,2243,2246,2253,2352,2356,2400,2404,2487,2491,2500],[10,11,13],"h2",{"id":12},"introduction","Introduction",[15,16,17],"p",{},"Regular expressions (regex) are one of the most powerful tools in a developer's toolkit. Whether you are validating user input, extracting data from text, or performing search-and-replace operations, knowing the right regex pattern can save hours of work.",[15,19,20],{},"In this guide, we cover 20 practical regex patterns that every developer should know, with working code examples in JavaScript and Python.",[10,22,24],{"id":23},"_1-email-address-validation","1. Email Address Validation",[15,26,27],{},"Email validation is one of the most common uses of regex. While a perfect email regex is notoriously complex, this pattern handles 99% of real-world cases.",[15,29,30,34,35],{},[31,32,33],"strong",{},"Pattern",": ",[36,37,38],"code",{},"\u002F^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\u002F",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-javascript shiki shiki-themes github-light github-dark","const emailRegex = \u002F^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\u002F;\nconsole.log(emailRegex.test('user@example.com'));  \u002F\u002F true\nconsole.log(emailRegex.test('invalid-email'));     \u002F\u002F false\n","javascript","",[36,47,48,103,132],{"__ignoreMap":45},[49,50,53,57,61,64,68,71,74,77,81,84,86,90,93,96,99],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"szBVR","const",[49,58,60],{"class":59},"sj4cs"," emailRegex",[49,62,63],{"class":55}," =",[49,65,67],{"class":66},"sZZnC"," \u002F",[49,69,70],{"class":55},"^",[49,72,73],{"class":59},"[a-zA-Z0-9._%+-]",[49,75,76],{"class":55},"+",[49,78,80],{"class":79},"sA_wV","@",[49,82,83],{"class":59},"[a-zA-Z0-9.-]",[49,85,76],{"class":55},[49,87,89],{"class":88},"snhLl","\\.",[49,91,92],{"class":59},"[a-zA-Z]",[49,94,95],{"class":55},"{2,}$",[49,97,98],{"class":66},"\u002F",[49,100,102],{"class":101},"sVt8B",";\n",[49,104,106,109,113,116,119,122,125,128],{"class":51,"line":105},2,[49,107,108],{"class":101},"console.",[49,110,112],{"class":111},"sScJk","log",[49,114,115],{"class":101},"(emailRegex.",[49,117,118],{"class":111},"test",[49,120,121],{"class":101},"(",[49,123,124],{"class":66},"'user@example.com'",[49,126,127],{"class":101},"));  ",[49,129,131],{"class":130},"sJ8bj","\u002F\u002F true\n",[49,133,135,137,139,141,143,145,148,151],{"class":51,"line":134},3,[49,136,108],{"class":101},[49,138,112],{"class":111},[49,140,115],{"class":101},[49,142,118],{"class":111},[49,144,121],{"class":101},[49,146,147],{"class":66},"'invalid-email'",[49,149,150],{"class":101},"));     ",[49,152,153],{"class":130},"\u002F\u002F false\n",[40,155,159],{"className":156,"code":157,"language":158,"meta":45,"style":45},"language-python shiki shiki-themes github-light github-dark","import re\nemail_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$'\nprint(bool(re.match(email_pattern, 'user@example.com')))  # True\n","python",[36,160,161,166,171],{"__ignoreMap":45},[49,162,163],{"class":51,"line":52},[49,164,165],{},"import re\n",[49,167,168],{"class":51,"line":105},[49,169,170],{},"email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$'\n",[49,172,173],{"class":51,"line":134},[49,174,175],{},"print(bool(re.match(email_pattern, 'user@example.com')))  # True\n",[15,177,178,181,182,185,186,189,190,193],{},[31,179,180],{},"How it works",": This pattern breaks down into three parts — the local part (",[36,183,184],{},"[a-zA-Z0-9._%+-]+","), the domain name (",[36,187,188],{},"[a-zA-Z0-9.-]+","), and the TLD (",[36,191,192],{},"[a-zA-Z]{2,}",").",[10,195,197],{"id":196},"_2-url-matching","2. URL Matching",[15,199,200],{},"Match HTTP and HTTPS URLs, including optional subdomains and paths.",[15,202,203,34,205],{},[31,204,33],{},[36,206,207],{},"\u002Fhttps?:\\\u002F\\\u002F([\\w-]+\\.)+[\\w-]+(\\\u002F[\\w\\-\\.~:\\\u002F\\?#\\[\\]@!$&'()*+,;=]*)?\u002F",[40,209,211],{"className":42,"code":210,"language":44,"meta":45,"style":45},"const urlRegex = \u002Fhttps?:\\\u002F\\\u002F([\\w-]+\\.)+[\\w-]+(\\\u002F[\\w\\-\\.~:\\\u002F\\?#\\[\\]@!$&'()*+,;=]*)?\u002Fg;\nconst text = 'Visit https:\u002F\u002Fexample.com\u002Fpage?q=search for more info.';\nconsole.log(text.match(urlRegex));\n\u002F\u002F ['https:\u002F\u002Fexample.com\u002Fpage?q=search']\n",[36,212,213,293,307,322],{"__ignoreMap":45},[49,214,215,217,220,222,224,227,230,233,236,238,241,243,245,248,250,252,254,256,259,262,264,267,270,273,276,279,282,284,286,288,291],{"class":51,"line":52},[49,216,56],{"class":55},[49,218,219],{"class":59}," urlRegex",[49,221,63],{"class":55},[49,223,67],{"class":66},[49,225,226],{"class":79},"https",[49,228,229],{"class":55},"?",[49,231,232],{"class":79},":",[49,234,235],{"class":88},"\\\u002F\\\u002F",[49,237,121],{"class":79},[49,239,240],{"class":59},"[\\w-]",[49,242,76],{"class":55},[49,244,89],{"class":88},[49,246,247],{"class":79},")",[49,249,76],{"class":55},[49,251,240],{"class":59},[49,253,76],{"class":55},[49,255,121],{"class":79},[49,257,258],{"class":88},"\\\u002F",[49,260,261],{"class":59},"[\\w\\-",[49,263,89],{"class":88},[49,265,266],{"class":59},"~:",[49,268,269],{"class":88},"\\\u002F\\?",[49,271,272],{"class":59},"#",[49,274,275],{"class":88},"\\[\\]",[49,277,278],{"class":59},"@!$&'()*+,;=]",[49,280,281],{"class":55},"*",[49,283,247],{"class":79},[49,285,229],{"class":55},[49,287,98],{"class":66},[49,289,290],{"class":55},"g",[49,292,102],{"class":101},[49,294,295,297,300,302,305],{"class":51,"line":105},[49,296,56],{"class":55},[49,298,299],{"class":59}," text",[49,301,63],{"class":55},[49,303,304],{"class":66}," 'Visit https:\u002F\u002Fexample.com\u002Fpage?q=search for more info.'",[49,306,102],{"class":101},[49,308,309,311,313,316,319],{"class":51,"line":134},[49,310,108],{"class":101},[49,312,112],{"class":111},[49,314,315],{"class":101},"(text.",[49,317,318],{"class":111},"match",[49,320,321],{"class":101},"(urlRegex));\n",[49,323,325],{"class":51,"line":324},4,[49,326,327],{"class":130},"\u002F\u002F ['https:\u002F\u002Fexample.com\u002Fpage?q=search']\n",[10,329,331],{"id":330},"_3-date-format-validation-yyyy-mm-dd","3. Date Format Validation (YYYY-MM-DD)",[15,333,334],{},"Validates dates in ISO 8601 format.",[15,336,337,34,339],{},[31,338,33],{},[36,340,341],{},"\u002F^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$\u002F",[40,343,345],{"className":42,"code":344,"language":44,"meta":45,"style":45},"const dateRegex = \u002F^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$\u002F;\nconsole.log(dateRegex.test('2026-05-26'));  \u002F\u002F true\nconsole.log(dateRegex.test('2026-13-01'));  \u002F\u002F false (invalid month)\n",[36,346,347,408,428],{"__ignoreMap":45},[49,348,349,351,354,356,358,360,363,366,369,372,375,378,381,384,386,388,391,393,396,399,401,404,406],{"class":51,"line":52},[49,350,56],{"class":55},[49,352,353],{"class":59}," dateRegex",[49,355,63],{"class":55},[49,357,67],{"class":66},[49,359,70],{"class":55},[49,361,362],{"class":59},"\\d",[49,364,365],{"class":55},"{4}",[49,367,368],{"class":79},"-(0",[49,370,371],{"class":59},"[1-9]",[49,373,374],{"class":55},"|",[49,376,377],{"class":79},"1",[49,379,380],{"class":59},"[0-2]",[49,382,383],{"class":79},")-(0",[49,385,371],{"class":59},[49,387,374],{"class":55},[49,389,390],{"class":59},"[12]\\d",[49,392,374],{"class":55},[49,394,395],{"class":79},"3",[49,397,398],{"class":59},"[01]",[49,400,247],{"class":79},[49,402,403],{"class":55},"$",[49,405,98],{"class":66},[49,407,102],{"class":101},[49,409,410,412,414,417,419,421,424,426],{"class":51,"line":105},[49,411,108],{"class":101},[49,413,112],{"class":111},[49,415,416],{"class":101},"(dateRegex.",[49,418,118],{"class":111},[49,420,121],{"class":101},[49,422,423],{"class":66},"'2026-05-26'",[49,425,127],{"class":101},[49,427,131],{"class":130},[49,429,430,432,434,436,438,440,443,445],{"class":51,"line":134},[49,431,108],{"class":101},[49,433,112],{"class":111},[49,435,416],{"class":101},[49,437,118],{"class":111},[49,439,121],{"class":101},[49,441,442],{"class":66},"'2026-13-01'",[49,444,127],{"class":101},[49,446,447],{"class":130},"\u002F\u002F false (invalid month)\n",[15,449,450,453],{},[31,451,452],{},"Note",": This validates format and range but does not check calendar validity (e.g., February 30 passes pattern validation but is not a real date).",[10,455,457],{"id":456},"_4-us-phone-number-validation","4. US Phone Number Validation",[15,459,460],{},"Matches common US phone number formats: (555) 123-4567, 555-123-4567, +1 555 123 4567.",[15,462,463,34,465],{},[31,464,33],{},[36,466,467],{},"\u002F^\\+?1?\\s?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$\u002F",[40,469,471],{"className":42,"code":470,"language":44,"meta":45,"style":45},"const phoneRegex = \u002F^\\+?1?\\s?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$\u002F;\nconsole.log(phoneRegex.test('(555) 123-4567'));  \u002F\u002F true\nconsole.log(phoneRegex.test('555-123-4567'));    \u002F\u002F true\nconsole.log(phoneRegex.test('12345'));           \u002F\u002F false\n",[36,472,473,537,557,577],{"__ignoreMap":45},[49,474,475,477,480,482,484,486,489,491,493,495,498,500,503,505,507,510,513,515,518,520,522,524,526,528,530,533,535],{"class":51,"line":52},[49,476,56],{"class":55},[49,478,479],{"class":59}," phoneRegex",[49,481,63],{"class":55},[49,483,67],{"class":66},[49,485,70],{"class":55},[49,487,488],{"class":88},"\\+",[49,490,229],{"class":55},[49,492,377],{"class":79},[49,494,229],{"class":55},[49,496,497],{"class":59},"\\s",[49,499,229],{"class":55},[49,501,502],{"class":88},"\\(",[49,504,229],{"class":55},[49,506,362],{"class":59},[49,508,509],{"class":55},"{3}",[49,511,512],{"class":88},"\\)",[49,514,229],{"class":55},[49,516,517],{"class":59},"[\\s.-]",[49,519,229],{"class":55},[49,521,362],{"class":59},[49,523,509],{"class":55},[49,525,517],{"class":59},[49,527,229],{"class":55},[49,529,362],{"class":59},[49,531,532],{"class":55},"{4}$",[49,534,98],{"class":66},[49,536,102],{"class":101},[49,538,539,541,543,546,548,550,553,555],{"class":51,"line":105},[49,540,108],{"class":101},[49,542,112],{"class":111},[49,544,545],{"class":101},"(phoneRegex.",[49,547,118],{"class":111},[49,549,121],{"class":101},[49,551,552],{"class":66},"'(555) 123-4567'",[49,554,127],{"class":101},[49,556,131],{"class":130},[49,558,559,561,563,565,567,569,572,575],{"class":51,"line":134},[49,560,108],{"class":101},[49,562,112],{"class":111},[49,564,545],{"class":101},[49,566,118],{"class":111},[49,568,121],{"class":101},[49,570,571],{"class":66},"'555-123-4567'",[49,573,574],{"class":101},"));    ",[49,576,131],{"class":130},[49,578,579,581,583,585,587,589,592,595],{"class":51,"line":324},[49,580,108],{"class":101},[49,582,112],{"class":111},[49,584,545],{"class":101},[49,586,118],{"class":111},[49,588,121],{"class":101},[49,590,591],{"class":66},"'12345'",[49,593,594],{"class":101},"));           ",[49,596,153],{"class":130},[10,598,600],{"id":599},"_5-ip-address-ipv4","5. IP Address (IPv4)",[15,602,603],{},"Validates an IPv4 address with four octets (0–255).",[15,605,606,34,608],{},[31,607,33],{},[36,609,610],{},"\u002F^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$\u002F",[40,612,614],{"className":42,"code":613,"language":44,"meta":45,"style":45},"const ipRegex = \u002F^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$\u002F;\nconsole.log(ipRegex.test('192.168.1.1'));  \u002F\u002F true\nconsole.log(ipRegex.test('256.0.0.1'));    \u002F\u002F false\n",[36,615,616,691,711],{"__ignoreMap":45},[49,617,618,620,623,625,627,629,632,635,637,640,643,645,647,649,652,654,656,658,660,662,665,667,669,671,673,675,677,679,681,683,685,687,689],{"class":51,"line":52},[49,619,56],{"class":55},[49,621,622],{"class":59}," ipRegex",[49,624,63],{"class":55},[49,626,67],{"class":66},[49,628,70],{"class":55},[49,630,631],{"class":79},"(?:(?:25",[49,633,634],{"class":59},"[0-5]",[49,636,374],{"class":55},[49,638,639],{"class":79},"2",[49,641,642],{"class":59},"[0-4]\\d",[49,644,374],{"class":55},[49,646,398],{"class":59},[49,648,229],{"class":55},[49,650,651],{"class":59},"\\d\\d",[49,653,229],{"class":55},[49,655,247],{"class":79},[49,657,89],{"class":88},[49,659,247],{"class":79},[49,661,509],{"class":55},[49,663,664],{"class":79},"(?:25",[49,666,634],{"class":59},[49,668,374],{"class":55},[49,670,639],{"class":79},[49,672,642],{"class":59},[49,674,374],{"class":55},[49,676,398],{"class":59},[49,678,229],{"class":55},[49,680,651],{"class":59},[49,682,229],{"class":55},[49,684,247],{"class":79},[49,686,403],{"class":55},[49,688,98],{"class":66},[49,690,102],{"class":101},[49,692,693,695,697,700,702,704,707,709],{"class":51,"line":105},[49,694,108],{"class":101},[49,696,112],{"class":111},[49,698,699],{"class":101},"(ipRegex.",[49,701,118],{"class":111},[49,703,121],{"class":101},[49,705,706],{"class":66},"'192.168.1.1'",[49,708,127],{"class":101},[49,710,131],{"class":130},[49,712,713,715,717,719,721,723,726,728],{"class":51,"line":134},[49,714,108],{"class":101},[49,716,112],{"class":111},[49,718,699],{"class":101},[49,720,118],{"class":111},[49,722,121],{"class":101},[49,724,725],{"class":66},"'256.0.0.1'",[49,727,574],{"class":101},[49,729,153],{"class":130},[15,731,732,733,736,737,740,741,744],{},"Each octet is constrained to 0–255 by using three alternatives: ",[36,734,735],{},"25[0-5]"," (250–255), ",[36,738,739],{},"2[0-4]\\d"," (200–249), and ",[36,742,743],{},"[01]?\\d\\d?"," (0–199).",[10,746,748],{"id":747},"_6-html-tag-extraction","6. HTML Tag Extraction",[15,750,751],{},"Extract all HTML tags from a block of markup.",[15,753,754,34,756],{},[31,755,33],{},[36,757,758],{},"\u002F\u003C\\\u002F?[\\w\\s=\"\u002F.':;#-\\\u002F\\?]+>\u002F",[40,760,762],{"className":42,"code":761,"language":44,"meta":45,"style":45},"const htmlRegex = \u002F\u003C\\\u002F?[\\w\\s=\"'.'\":;#-\\\u002F\\?]+>\u002Fg;\nconst html = '\u003Cdiv class=\"container\">\u003Cp>Hello\u003C\u002Fp>\u003C\u002Fdiv>';\nconsole.log(html.match(htmlRegex));\n\u002F\u002F ['\u003Cdiv class=\"container\">', '\u003Cp>', '\u003C\u002Fp>', '\u003C\u002Fdiv>']\n",[36,763,764,801,815,829],{"__ignoreMap":45},[49,765,766,768,771,773,775,778,780,782,785,787,790,792,795,797,799],{"class":51,"line":52},[49,767,56],{"class":55},[49,769,770],{"class":59}," htmlRegex",[49,772,63],{"class":55},[49,774,67],{"class":66},[49,776,777],{"class":79},"\u003C",[49,779,258],{"class":88},[49,781,229],{"class":55},[49,783,784],{"class":59},"[\\w\\s=\"'.'\":;#-",[49,786,269],{"class":88},[49,788,789],{"class":59},"]",[49,791,76],{"class":55},[49,793,794],{"class":79},">",[49,796,98],{"class":66},[49,798,290],{"class":55},[49,800,102],{"class":101},[49,802,803,805,808,810,813],{"class":51,"line":105},[49,804,56],{"class":55},[49,806,807],{"class":59}," html",[49,809,63],{"class":55},[49,811,812],{"class":66}," '\u003Cdiv class=\"container\">\u003Cp>Hello\u003C\u002Fp>\u003C\u002Fdiv>'",[49,814,102],{"class":101},[49,816,817,819,821,824,826],{"class":51,"line":134},[49,818,108],{"class":101},[49,820,112],{"class":111},[49,822,823],{"class":101},"(html.",[49,825,318],{"class":111},[49,827,828],{"class":101},"(htmlRegex));\n",[49,830,831],{"class":51,"line":324},[49,832,833],{"class":130},"\u002F\u002F ['\u003Cdiv class=\"container\">', '\u003Cp>', '\u003C\u002Fp>', '\u003C\u002Fdiv>']\n",[10,835,837],{"id":836},"_7-password-strength-validation","7. Password Strength Validation",[15,839,840],{},"Require at least 8 characters, one uppercase letter, one lowercase letter, one digit, and one special character.",[15,842,843,34,845],{},[31,844,33],{},[36,846,847],{},"\u002F^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&#])[A-Za-z\\d@$!%*?&#]{8,}$\u002F",[40,849,851],{"className":42,"code":850,"language":44,"meta":45,"style":45},"const passwordRegex = \u002F^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&#])[A-Za-z\\d@$!%*?&#]{8,}$\u002F;\nconsole.log(passwordRegex.test('Pass1234!'));   \u002F\u002F true\nconsole.log(passwordRegex.test('weakpassword')); \u002F\u002F false\n",[36,852,853,916,937],{"__ignoreMap":45},[49,854,855,857,860,862,864,866,869,872,874,877,880,882,884,887,889,891,893,895,897,899,901,904,906,909,912,914],{"class":51,"line":52},[49,856,56],{"class":55},[49,858,859],{"class":59}," passwordRegex",[49,861,63],{"class":55},[49,863,67],{"class":66},[49,865,70],{"class":55},[49,867,868],{"class":79},"(?=",[49,870,871],{"class":59},".",[49,873,281],{"class":55},[49,875,876],{"class":59},"[a-z]",[49,878,879],{"class":79},")(?=",[49,881,871],{"class":59},[49,883,281],{"class":55},[49,885,886],{"class":59},"[A-Z]",[49,888,879],{"class":79},[49,890,871],{"class":59},[49,892,281],{"class":55},[49,894,362],{"class":59},[49,896,879],{"class":79},[49,898,871],{"class":59},[49,900,281],{"class":55},[49,902,903],{"class":59},"[@$!%*?&#]",[49,905,247],{"class":79},[49,907,908],{"class":59},"[A-Za-z\\d@$!%*?&#]",[49,910,911],{"class":55},"{8,}$",[49,913,98],{"class":66},[49,915,102],{"class":101},[49,917,918,920,922,925,927,929,932,935],{"class":51,"line":105},[49,919,108],{"class":101},[49,921,112],{"class":111},[49,923,924],{"class":101},"(passwordRegex.",[49,926,118],{"class":111},[49,928,121],{"class":101},[49,930,931],{"class":66},"'Pass1234!'",[49,933,934],{"class":101},"));   ",[49,936,131],{"class":130},[49,938,939,941,943,945,947,949,952,955],{"class":51,"line":134},[49,940,108],{"class":101},[49,942,112],{"class":111},[49,944,924],{"class":101},[49,946,118],{"class":111},[49,948,121],{"class":101},[49,950,951],{"class":66},"'weakpassword'",[49,953,954],{"class":101},")); ",[49,956,153],{"class":130},[15,958,959,960,963],{},"The ",[36,961,962],{},"(?=.*[a-z])"," syntax uses lookahead assertions to check for each character class without consuming characters.",[10,965,967],{"id":966},"_8-extracting-all-urls-from-text","8. Extracting All URLs from Text",[15,969,970],{},"Find every URL in a block of text, including those without protocol.",[40,972,974],{"className":42,"code":973,"language":44,"meta":45,"style":45},"const urlExtractRegex = \u002Fhttps?:\\\u002F\\\u002F[^\\s]+|www\\.[^\\s]+\u002Fg;\nconst text = 'Check www.example.com and https:\u002F\u002Fgoogle.com for details.';\nconsole.log(text.match(urlExtractRegex));\n\u002F\u002F ['www.example.com', 'https:\u002F\u002Fgoogle.com']\n",[36,975,976,1025,1038,1051],{"__ignoreMap":45},[49,977,978,980,983,985,987,989,991,993,995,998,1000,1003,1006,1009,1011,1013,1015,1017,1019,1021,1023],{"class":51,"line":52},[49,979,56],{"class":55},[49,981,982],{"class":59}," urlExtractRegex",[49,984,63],{"class":55},[49,986,67],{"class":66},[49,988,226],{"class":79},[49,990,229],{"class":55},[49,992,232],{"class":79},[49,994,235],{"class":88},[49,996,997],{"class":59},"[",[49,999,70],{"class":55},[49,1001,1002],{"class":59},"\\s]",[49,1004,1005],{"class":55},"+|",[49,1007,1008],{"class":79},"www",[49,1010,89],{"class":88},[49,1012,997],{"class":59},[49,1014,70],{"class":55},[49,1016,1002],{"class":59},[49,1018,76],{"class":55},[49,1020,98],{"class":66},[49,1022,290],{"class":55},[49,1024,102],{"class":101},[49,1026,1027,1029,1031,1033,1036],{"class":51,"line":105},[49,1028,56],{"class":55},[49,1030,299],{"class":59},[49,1032,63],{"class":55},[49,1034,1035],{"class":66}," 'Check www.example.com and https:\u002F\u002Fgoogle.com for details.'",[49,1037,102],{"class":101},[49,1039,1040,1042,1044,1046,1048],{"class":51,"line":134},[49,1041,108],{"class":101},[49,1043,112],{"class":111},[49,1045,315],{"class":101},[49,1047,318],{"class":111},[49,1049,1050],{"class":101},"(urlExtractRegex));\n",[49,1052,1053],{"class":51,"line":324},[49,1054,1055],{"class":130},"\u002F\u002F ['www.example.com', 'https:\u002F\u002Fgoogle.com']\n",[10,1057,1059],{"id":1058},"_9-hex-color-code-validation","9. Hex Color Code Validation",[15,1061,1062,1063,1065],{},"Match 3-digit and 6-digit hex color codes, with or without the ",[36,1064,272],{}," prefix.",[15,1067,1068,34,1070],{},[31,1069,33],{},[36,1071,1072],{},"\u002F^#?([a-fA-F0-9]{3}|[a-fA-F0-9]{6})$\u002F",[40,1074,1076],{"className":42,"code":1075,"language":44,"meta":45,"style":45},"const hexRegex = \u002F^#?([a-fA-F0-9]{3}|[a-fA-F0-9]{6})$\u002F;\nconsole.log(hexRegex.test('#FF5733'));  \u002F\u002F true\nconsole.log(hexRegex.test('abc'));      \u002F\u002F true\nconsole.log(hexRegex.test('#GGG'));     \u002F\u002F false\n",[36,1077,1078,1116,1136,1156],{"__ignoreMap":45},[49,1079,1080,1082,1085,1087,1089,1091,1093,1095,1097,1100,1103,1105,1108,1110,1112,1114],{"class":51,"line":52},[49,1081,56],{"class":55},[49,1083,1084],{"class":59}," hexRegex",[49,1086,63],{"class":55},[49,1088,67],{"class":66},[49,1090,70],{"class":55},[49,1092,272],{"class":79},[49,1094,229],{"class":55},[49,1096,121],{"class":79},[49,1098,1099],{"class":59},"[a-fA-F0-9]",[49,1101,1102],{"class":55},"{3}|",[49,1104,1099],{"class":59},[49,1106,1107],{"class":55},"{6}",[49,1109,247],{"class":79},[49,1111,403],{"class":55},[49,1113,98],{"class":66},[49,1115,102],{"class":101},[49,1117,1118,1120,1122,1125,1127,1129,1132,1134],{"class":51,"line":105},[49,1119,108],{"class":101},[49,1121,112],{"class":111},[49,1123,1124],{"class":101},"(hexRegex.",[49,1126,118],{"class":111},[49,1128,121],{"class":101},[49,1130,1131],{"class":66},"'#FF5733'",[49,1133,127],{"class":101},[49,1135,131],{"class":130},[49,1137,1138,1140,1142,1144,1146,1148,1151,1154],{"class":51,"line":134},[49,1139,108],{"class":101},[49,1141,112],{"class":111},[49,1143,1124],{"class":101},[49,1145,118],{"class":111},[49,1147,121],{"class":101},[49,1149,1150],{"class":66},"'abc'",[49,1152,1153],{"class":101},"));      ",[49,1155,131],{"class":130},[49,1157,1158,1160,1162,1164,1166,1168,1171,1173],{"class":51,"line":324},[49,1159,108],{"class":101},[49,1161,112],{"class":111},[49,1163,1124],{"class":101},[49,1165,118],{"class":111},[49,1167,121],{"class":101},[49,1169,1170],{"class":66},"'#GGG'",[49,1172,150],{"class":101},[49,1174,153],{"class":130},[10,1176,1178],{"id":1177},"_10-extracting-numbers-from-a-string","10. Extracting Numbers from a String",[15,1180,1181],{},"Pull all numeric values out of mixed text.",[15,1183,1184,34,1186],{},[31,1185,33],{},[36,1187,1188],{},"\u002F\\d+(\\.\\d+)?\u002Fg",[40,1190,1192],{"className":42,"code":1191,"language":44,"meta":45,"style":45},"const numRegex = \u002F\\d+(\\.\\d+)?\u002Fg;\nconsole.log('Price: $29.99, Qty: 3'.match(numRegex));\n\u002F\u002F ['29.99', '3']\n",[36,1193,1194,1227,1245],{"__ignoreMap":45},[49,1195,1196,1198,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225],{"class":51,"line":52},[49,1197,56],{"class":55},[49,1199,1200],{"class":59}," numRegex",[49,1202,63],{"class":55},[49,1204,67],{"class":66},[49,1206,362],{"class":59},[49,1208,76],{"class":55},[49,1210,121],{"class":79},[49,1212,89],{"class":88},[49,1214,362],{"class":59},[49,1216,76],{"class":55},[49,1218,247],{"class":79},[49,1220,229],{"class":55},[49,1222,98],{"class":66},[49,1224,290],{"class":55},[49,1226,102],{"class":101},[49,1228,1229,1231,1233,1235,1238,1240,1242],{"class":51,"line":105},[49,1230,108],{"class":101},[49,1232,112],{"class":111},[49,1234,121],{"class":101},[49,1236,1237],{"class":66},"'Price: $29.99, Qty: 3'",[49,1239,871],{"class":101},[49,1241,318],{"class":111},[49,1243,1244],{"class":101},"(numRegex));\n",[49,1246,1247],{"class":51,"line":134},[49,1248,1249],{"class":130},"\u002F\u002F ['29.99', '3']\n",[40,1251,1253],{"className":156,"code":1252,"language":158,"meta":45,"style":45},"import re\ntext = \"Price: $29.99, Qty: 3\"\nprint(re.findall(r'\\d+(?:\\.\\d+)?', text))\n# ['29.99', '3']\n",[36,1254,1255,1259,1264,1269],{"__ignoreMap":45},[49,1256,1257],{"class":51,"line":52},[49,1258,165],{},[49,1260,1261],{"class":51,"line":105},[49,1262,1263],{},"text = \"Price: $29.99, Qty: 3\"\n",[49,1265,1266],{"class":51,"line":134},[49,1267,1268],{},"print(re.findall(r'\\d+(?:\\.\\d+)?', text))\n",[49,1270,1271],{"class":51,"line":324},[49,1272,1273],{},"# ['29.99', '3']\n",[10,1275,1277],{"id":1276},"_11-slug-generation-url-safe-strings","11. Slug Generation (URL-Safe Strings)",[15,1279,1280],{},"Convert any text to a URL-friendly slug.",[40,1282,1284],{"className":42,"code":1283,"language":44,"meta":45,"style":45},"function slugify(text) {\n  return text\n    .toLowerCase()\n    .replace(\u002F[^\\w\\s-]\u002Fg, '')   \u002F\u002F remove special chars\n    .replace(\u002F[\\s_]+\u002Fg, '-')     \u002F\u002F spaces\u002Funderscores to hyphens\n    .replace(\u002F^-+|-+$\u002Fg, '');    \u002F\u002F trim hyphens\n}\nconsole.log(slugify('Hello World! How Are You?'));\n\u002F\u002F 'hello-world-how-are-you'\n",[36,1285,1286,1303,1311,1322,1356,1387,1424,1430,1450],{"__ignoreMap":45},[49,1287,1288,1291,1294,1296,1300],{"class":51,"line":52},[49,1289,1290],{"class":55},"function",[49,1292,1293],{"class":111}," slugify",[49,1295,121],{"class":101},[49,1297,1299],{"class":1298},"s4XuR","text",[49,1301,1302],{"class":101},") {\n",[49,1304,1305,1308],{"class":51,"line":105},[49,1306,1307],{"class":55},"  return",[49,1309,1310],{"class":101}," text\n",[49,1312,1313,1316,1319],{"class":51,"line":134},[49,1314,1315],{"class":101},"    .",[49,1317,1318],{"class":111},"toLowerCase",[49,1320,1321],{"class":101},"()\n",[49,1323,1324,1326,1329,1331,1333,1335,1337,1340,1342,1344,1347,1350,1353],{"class":51,"line":324},[49,1325,1315],{"class":101},[49,1327,1328],{"class":111},"replace",[49,1330,121],{"class":101},[49,1332,98],{"class":66},[49,1334,997],{"class":59},[49,1336,70],{"class":55},[49,1338,1339],{"class":59},"\\w\\s-]",[49,1341,98],{"class":66},[49,1343,290],{"class":55},[49,1345,1346],{"class":101},", ",[49,1348,1349],{"class":66},"''",[49,1351,1352],{"class":101},")   ",[49,1354,1355],{"class":130},"\u002F\u002F remove special chars\n",[49,1357,1359,1361,1363,1365,1367,1370,1372,1374,1376,1378,1381,1384],{"class":51,"line":1358},5,[49,1360,1315],{"class":101},[49,1362,1328],{"class":111},[49,1364,121],{"class":101},[49,1366,98],{"class":66},[49,1368,1369],{"class":59},"[\\s_]",[49,1371,76],{"class":55},[49,1373,98],{"class":66},[49,1375,290],{"class":55},[49,1377,1346],{"class":101},[49,1379,1380],{"class":66},"'-'",[49,1382,1383],{"class":101},")     ",[49,1385,1386],{"class":130},"\u002F\u002F spaces\u002Funderscores to hyphens\n",[49,1388,1390,1392,1394,1396,1398,1400,1403,1405,1407,1410,1412,1414,1416,1418,1421],{"class":51,"line":1389},6,[49,1391,1315],{"class":101},[49,1393,1328],{"class":111},[49,1395,121],{"class":101},[49,1397,98],{"class":66},[49,1399,70],{"class":55},[49,1401,1402],{"class":79},"-",[49,1404,1005],{"class":55},[49,1406,1402],{"class":79},[49,1408,1409],{"class":55},"+$",[49,1411,98],{"class":66},[49,1413,290],{"class":55},[49,1415,1346],{"class":101},[49,1417,1349],{"class":66},[49,1419,1420],{"class":101},");    ",[49,1422,1423],{"class":130},"\u002F\u002F trim hyphens\n",[49,1425,1427],{"class":51,"line":1426},7,[49,1428,1429],{"class":101},"}\n",[49,1431,1433,1435,1437,1439,1442,1444,1447],{"class":51,"line":1432},8,[49,1434,108],{"class":101},[49,1436,112],{"class":111},[49,1438,121],{"class":101},[49,1440,1441],{"class":111},"slugify",[49,1443,121],{"class":101},[49,1445,1446],{"class":66},"'Hello World! How Are You?'",[49,1448,1449],{"class":101},"));\n",[49,1451,1453],{"class":51,"line":1452},9,[49,1454,1455],{"class":130},"\u002F\u002F 'hello-world-how-are-you'\n",[10,1457,1459],{"id":1458},"_12-credit-card-number-validation","12. Credit Card Number Validation",[15,1461,1462],{},"Detect common credit card number formats, with optional spaces or hyphens.",[15,1464,1465,34,1467],{},[31,1466,33],{},[36,1468,1469],{},"\u002F^\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}$\u002F",[40,1471,1473],{"className":42,"code":1472,"language":44,"meta":45,"style":45},"const ccRegex = \u002F^\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}$\u002F;\nconsole.log(ccRegex.test('4111-1111-1111-1111'));  \u002F\u002F true\nconsole.log(ccRegex.test('4111111111111111'));      \u002F\u002F true\n",[36,1474,1475,1521,1541],{"__ignoreMap":45},[49,1476,1477,1479,1482,1484,1486,1488,1490,1492,1495,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519],{"class":51,"line":52},[49,1478,56],{"class":55},[49,1480,1481],{"class":59}," ccRegex",[49,1483,63],{"class":55},[49,1485,67],{"class":66},[49,1487,70],{"class":55},[49,1489,362],{"class":59},[49,1491,365],{"class":55},[49,1493,1494],{"class":59},"[\\s-]",[49,1496,229],{"class":55},[49,1498,362],{"class":59},[49,1500,365],{"class":55},[49,1502,1494],{"class":59},[49,1504,229],{"class":55},[49,1506,362],{"class":59},[49,1508,365],{"class":55},[49,1510,1494],{"class":59},[49,1512,229],{"class":55},[49,1514,362],{"class":59},[49,1516,532],{"class":55},[49,1518,98],{"class":66},[49,1520,102],{"class":101},[49,1522,1523,1525,1527,1530,1532,1534,1537,1539],{"class":51,"line":105},[49,1524,108],{"class":101},[49,1526,112],{"class":111},[49,1528,1529],{"class":101},"(ccRegex.",[49,1531,118],{"class":111},[49,1533,121],{"class":101},[49,1535,1536],{"class":66},"'4111-1111-1111-1111'",[49,1538,127],{"class":101},[49,1540,131],{"class":130},[49,1542,1543,1545,1547,1549,1551,1553,1556,1558],{"class":51,"line":134},[49,1544,108],{"class":101},[49,1546,112],{"class":111},[49,1548,1529],{"class":101},[49,1550,118],{"class":111},[49,1552,121],{"class":101},[49,1554,1555],{"class":66},"'4111111111111111'",[49,1557,1153],{"class":101},[49,1559,131],{"class":130},[15,1561,1562,1565],{},[31,1563,1564],{},"Security note",": Never trust client-side validation alone for payment processing.",[10,1567,1569],{"id":1568},"_13-time-format-hhmm-ampm","13. Time Format (HH:MM AM\u002FPM)",[15,1571,1572],{},"Match 12-hour time format with optional leading zero.",[15,1574,1575,34,1577],{},[31,1576,33],{},[36,1578,1579],{},"\u002F^(0?[1-9]|1[0-2]):[0-5]\\d\\s?(AM|PM)$\u002Fi",[40,1581,1583],{"className":42,"code":1582,"language":44,"meta":45,"style":45},"const timeRegex = \u002F^(0?[1-9]|1[0-2]):[0-5]\\d\\s?(AM|PM)$\u002Fi;\nconsole.log(timeRegex.test('2:30 PM'));   \u002F\u002F true\nconsole.log(timeRegex.test('13:00 AM'));  \u002F\u002F false\n",[36,1584,1585,1636,1656],{"__ignoreMap":45},[49,1586,1587,1589,1592,1594,1596,1598,1601,1603,1605,1607,1609,1611,1614,1617,1619,1622,1624,1627,1629,1631,1634],{"class":51,"line":52},[49,1588,56],{"class":55},[49,1590,1591],{"class":59}," timeRegex",[49,1593,63],{"class":55},[49,1595,67],{"class":66},[49,1597,70],{"class":55},[49,1599,1600],{"class":79},"(0",[49,1602,229],{"class":55},[49,1604,371],{"class":59},[49,1606,374],{"class":55},[49,1608,377],{"class":79},[49,1610,380],{"class":59},[49,1612,1613],{"class":79},"):",[49,1615,1616],{"class":59},"[0-5]\\d\\s",[49,1618,229],{"class":55},[49,1620,1621],{"class":79},"(AM",[49,1623,374],{"class":55},[49,1625,1626],{"class":79},"PM)",[49,1628,403],{"class":55},[49,1630,98],{"class":66},[49,1632,1633],{"class":55},"i",[49,1635,102],{"class":101},[49,1637,1638,1640,1642,1645,1647,1649,1652,1654],{"class":51,"line":105},[49,1639,108],{"class":101},[49,1641,112],{"class":111},[49,1643,1644],{"class":101},"(timeRegex.",[49,1646,118],{"class":111},[49,1648,121],{"class":101},[49,1650,1651],{"class":66},"'2:30 PM'",[49,1653,934],{"class":101},[49,1655,131],{"class":130},[49,1657,1658,1660,1662,1664,1666,1668,1671,1673],{"class":51,"line":134},[49,1659,108],{"class":101},[49,1661,112],{"class":111},[49,1663,1644],{"class":101},[49,1665,118],{"class":111},[49,1667,121],{"class":101},[49,1669,1670],{"class":66},"'13:00 AM'",[49,1672,127],{"class":101},[49,1674,153],{"class":130},[10,1676,1678],{"id":1677},"_14-username-validation","14. Username Validation",[15,1680,1681],{},"Validate usernames: 3–16 characters, alphanumeric with underscores and hyphens.",[15,1683,1684,34,1686],{},[31,1685,33],{},[36,1687,1688],{},"\u002F^[a-zA-Z0-9_-]{3,16}$\u002F",[40,1690,1692],{"className":42,"code":1691,"language":44,"meta":45,"style":45},"const userRegex = \u002F^[a-zA-Z0-9_-]{3,16}$\u002F;\nconsole.log(userRegex.test('john_doe'));     \u002F\u002F true\nconsole.log(userRegex.test('ab'));           \u002F\u002F false (too short)\nconsole.log(userRegex.test('user@name'));    \u002F\u002F false\n",[36,1693,1694,1717,1737,1757],{"__ignoreMap":45},[49,1695,1696,1698,1701,1703,1705,1707,1710,1713,1715],{"class":51,"line":52},[49,1697,56],{"class":55},[49,1699,1700],{"class":59}," userRegex",[49,1702,63],{"class":55},[49,1704,67],{"class":66},[49,1706,70],{"class":55},[49,1708,1709],{"class":59},"[a-zA-Z0-9_-]",[49,1711,1712],{"class":55},"{3,16}$",[49,1714,98],{"class":66},[49,1716,102],{"class":101},[49,1718,1719,1721,1723,1726,1728,1730,1733,1735],{"class":51,"line":105},[49,1720,108],{"class":101},[49,1722,112],{"class":111},[49,1724,1725],{"class":101},"(userRegex.",[49,1727,118],{"class":111},[49,1729,121],{"class":101},[49,1731,1732],{"class":66},"'john_doe'",[49,1734,150],{"class":101},[49,1736,131],{"class":130},[49,1738,1739,1741,1743,1745,1747,1749,1752,1754],{"class":51,"line":134},[49,1740,108],{"class":101},[49,1742,112],{"class":111},[49,1744,1725],{"class":101},[49,1746,118],{"class":111},[49,1748,121],{"class":101},[49,1750,1751],{"class":66},"'ab'",[49,1753,594],{"class":101},[49,1755,1756],{"class":130},"\u002F\u002F false (too short)\n",[49,1758,1759,1761,1763,1765,1767,1769,1772,1774],{"class":51,"line":324},[49,1760,108],{"class":101},[49,1762,112],{"class":111},[49,1764,1725],{"class":101},[49,1766,118],{"class":111},[49,1768,121],{"class":101},[49,1770,1771],{"class":66},"'user@name'",[49,1773,574],{"class":101},[49,1775,153],{"class":130},[10,1777,1779],{"id":1778},"_15-whitespace-trimming","15. Whitespace Trimming",[15,1781,1782],{},"Remove leading and trailing whitespace from a string.",[15,1784,1785,34,1787],{},[31,1786,33],{},[36,1788,1789],{},"\u002F^\\s+|\\s+$\u002Fg",[40,1791,1793],{"className":42,"code":1792,"language":44,"meta":45,"style":45},"const text = '  hello world  ';\nconsole.log(text.replace(\u002F^\\s+|\\s+$\u002Fg, ''));\n\u002F\u002F 'hello world'\n",[36,1794,1795,1808,1842],{"__ignoreMap":45},[49,1796,1797,1799,1801,1803,1806],{"class":51,"line":52},[49,1798,56],{"class":55},[49,1800,299],{"class":59},[49,1802,63],{"class":55},[49,1804,1805],{"class":66}," '  hello world  '",[49,1807,102],{"class":101},[49,1809,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840],{"class":51,"line":105},[49,1811,108],{"class":101},[49,1813,112],{"class":111},[49,1815,315],{"class":101},[49,1817,1328],{"class":111},[49,1819,121],{"class":101},[49,1821,98],{"class":66},[49,1823,70],{"class":55},[49,1825,497],{"class":59},[49,1827,1005],{"class":55},[49,1829,497],{"class":59},[49,1831,1409],{"class":55},[49,1833,98],{"class":66},[49,1835,290],{"class":55},[49,1837,1346],{"class":101},[49,1839,1349],{"class":66},[49,1841,1449],{"class":101},[49,1843,1844],{"class":51,"line":134},[49,1845,1846],{"class":130},"\u002F\u002F 'hello world'\n",[10,1848,1850],{"id":1849},"_16-mac-address-validation","16. MAC Address Validation",[15,1852,1853],{},"Validate MAC addresses in common formats (AA:BB:CC:DD:EE:FF or AA-BB-CC-DD-EE-FF).",[15,1855,1856,34,1858],{},[31,1857,33],{},[36,1859,1860],{},"\u002F^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$\u002F",[40,1862,1864],{"className":42,"code":1863,"language":44,"meta":45,"style":45},"const macRegex = \u002F^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$\u002F;\nconsole.log(macRegex.test('00:1A:2B:3C:4D:5E'));  \u002F\u002F true\nconsole.log(macRegex.test('00:1A:2B:3C:4D'));     \u002F\u002F false\n",[36,1865,1866,1909,1929],{"__ignoreMap":45},[49,1867,1868,1870,1873,1875,1877,1879,1881,1884,1887,1890,1892,1895,1897,1899,1901,1903,1905,1907],{"class":51,"line":52},[49,1869,56],{"class":55},[49,1871,1872],{"class":59}," macRegex",[49,1874,63],{"class":55},[49,1876,67],{"class":66},[49,1878,70],{"class":55},[49,1880,121],{"class":79},[49,1882,1883],{"class":59},"[0-9A-Fa-f]",[49,1885,1886],{"class":55},"{2}",[49,1888,1889],{"class":59},"[:-]",[49,1891,247],{"class":79},[49,1893,1894],{"class":55},"{5}",[49,1896,121],{"class":79},[49,1898,1883],{"class":59},[49,1900,1886],{"class":55},[49,1902,247],{"class":79},[49,1904,403],{"class":55},[49,1906,98],{"class":66},[49,1908,102],{"class":101},[49,1910,1911,1913,1915,1918,1920,1922,1925,1927],{"class":51,"line":105},[49,1912,108],{"class":101},[49,1914,112],{"class":111},[49,1916,1917],{"class":101},"(macRegex.",[49,1919,118],{"class":111},[49,1921,121],{"class":101},[49,1923,1924],{"class":66},"'00:1A:2B:3C:4D:5E'",[49,1926,127],{"class":101},[49,1928,131],{"class":130},[49,1930,1931,1933,1935,1937,1939,1941,1944,1946],{"class":51,"line":134},[49,1932,108],{"class":101},[49,1934,112],{"class":111},[49,1936,1917],{"class":101},[49,1938,118],{"class":111},[49,1940,121],{"class":101},[49,1942,1943],{"class":66},"'00:1A:2B:3C:4D'",[49,1945,150],{"class":101},[49,1947,153],{"class":130},[10,1949,1951],{"id":1950},"_17-matching-repeated-words","17. Matching Repeated Words",[15,1953,1954],{},"Find duplicate consecutive words (common typo in text).",[15,1956,1957,34,1959],{},[31,1958,33],{},[36,1960,1961],{},"\u002F\\b(\\w+)\\s+\\1\\b\u002Fgi",[40,1963,1965],{"className":42,"code":1964,"language":44,"meta":45,"style":45},"const dupRegex = \u002F\\b(\\w+)\\s+\\1\\b\u002Fgi;\nconsole.log('This this is a test test.'.match(dupRegex));\n\u002F\u002F ['This this', 'test test']\n",[36,1966,1967,2002,2020],{"__ignoreMap":45},[49,1968,1969,1971,1974,1976,1978,1981,1983,1986,1988,1990,1992,1995,1997,2000],{"class":51,"line":52},[49,1970,56],{"class":55},[49,1972,1973],{"class":59}," dupRegex",[49,1975,63],{"class":55},[49,1977,67],{"class":66},[49,1979,1980],{"class":55},"\\b",[49,1982,121],{"class":79},[49,1984,1985],{"class":59},"\\w",[49,1987,76],{"class":55},[49,1989,247],{"class":79},[49,1991,497],{"class":59},[49,1993,1994],{"class":55},"+\\1\\b",[49,1996,98],{"class":66},[49,1998,1999],{"class":55},"gi",[49,2001,102],{"class":101},[49,2003,2004,2006,2008,2010,2013,2015,2017],{"class":51,"line":105},[49,2005,108],{"class":101},[49,2007,112],{"class":111},[49,2009,121],{"class":101},[49,2011,2012],{"class":66},"'This this is a test test.'",[49,2014,871],{"class":101},[49,2016,318],{"class":111},[49,2018,2019],{"class":101},"(dupRegex));\n",[49,2021,2022],{"class":51,"line":134},[49,2023,2024],{"class":130},"\u002F\u002F ['This this', 'test test']\n",[10,2026,2028],{"id":2027},"_18-json-string-extraction","18. JSON String Extraction",[15,2030,2031],{},"Extract a JSON object from a larger text body.",[15,2033,2034,34,2036],{},[31,2035,33],{},[36,2037,2038],{},"\u002F\\{[\\s\\S]*\\}\u002F",[40,2040,2042],{"className":42,"code":2041,"language":44,"meta":45,"style":45},"const jsonRegex = \u002F\\{[\\s\\S]*\\}\u002F;\nconst text = 'Response: {\"name\": \"John\", \"age\": 30}';\nconst match = text.match(jsonRegex);\nconsole.log(match ? JSON.parse(match[0]) : null);\n\u002F\u002F { name: 'John', age: 30 }\n",[36,2043,2044,2070,2083,2100,2136],{"__ignoreMap":45},[49,2045,2046,2048,2051,2053,2055,2058,2061,2063,2066,2068],{"class":51,"line":52},[49,2047,56],{"class":55},[49,2049,2050],{"class":59}," jsonRegex",[49,2052,63],{"class":55},[49,2054,67],{"class":66},[49,2056,2057],{"class":88},"\\{",[49,2059,2060],{"class":59},"[\\s\\S]",[49,2062,281],{"class":55},[49,2064,2065],{"class":88},"\\}",[49,2067,98],{"class":66},[49,2069,102],{"class":101},[49,2071,2072,2074,2076,2078,2081],{"class":51,"line":105},[49,2073,56],{"class":55},[49,2075,299],{"class":59},[49,2077,63],{"class":55},[49,2079,2080],{"class":66}," 'Response: {\"name\": \"John\", \"age\": 30}'",[49,2082,102],{"class":101},[49,2084,2085,2087,2090,2092,2095,2097],{"class":51,"line":134},[49,2086,56],{"class":55},[49,2088,2089],{"class":59}," match",[49,2091,63],{"class":55},[49,2093,2094],{"class":101}," text.",[49,2096,318],{"class":111},[49,2098,2099],{"class":101},"(jsonRegex);\n",[49,2101,2102,2104,2106,2109,2111,2114,2116,2119,2122,2125,2128,2130,2133],{"class":51,"line":324},[49,2103,108],{"class":101},[49,2105,112],{"class":111},[49,2107,2108],{"class":101},"(match ",[49,2110,229],{"class":55},[49,2112,2113],{"class":59}," JSON",[49,2115,871],{"class":101},[49,2117,2118],{"class":111},"parse",[49,2120,2121],{"class":101},"(match[",[49,2123,2124],{"class":59},"0",[49,2126,2127],{"class":101},"]) ",[49,2129,232],{"class":55},[49,2131,2132],{"class":59}," null",[49,2134,2135],{"class":101},");\n",[49,2137,2138],{"class":51,"line":1358},[49,2139,2140],{"class":130},"\u002F\u002F { name: 'John', age: 30 }\n",[10,2142,2144],{"id":2143},"_19-file-extension-extraction","19. File Extension Extraction",[15,2146,2147],{},"Get the file extension from a filename or path.",[15,2149,2150,34,2152],{},[31,2151,33],{},[36,2153,2154],{},"\u002F\\.([\\w]+)$\u002F",[40,2156,2158],{"className":42,"code":2157,"language":44,"meta":45,"style":45},"const extRegex = \u002F\\.([\\w]+)$\u002F;\nconsole.log('document.pdf'.match(extRegex)?.[1]);   \u002F\u002F 'pdf'\nconsole.log('archive.tar.gz'.match(extRegex)?.[1]); \u002F\u002F 'gz'\n",[36,2159,2160,2188,2214],{"__ignoreMap":45},[49,2161,2162,2164,2167,2169,2171,2173,2175,2178,2180,2182,2184,2186],{"class":51,"line":52},[49,2163,56],{"class":55},[49,2165,2166],{"class":59}," extRegex",[49,2168,63],{"class":55},[49,2170,67],{"class":66},[49,2172,89],{"class":88},[49,2174,121],{"class":79},[49,2176,2177],{"class":59},"[\\w]",[49,2179,76],{"class":55},[49,2181,247],{"class":79},[49,2183,403],{"class":55},[49,2185,98],{"class":66},[49,2187,102],{"class":101},[49,2189,2190,2192,2194,2196,2199,2201,2203,2206,2208,2211],{"class":51,"line":105},[49,2191,108],{"class":101},[49,2193,112],{"class":111},[49,2195,121],{"class":101},[49,2197,2198],{"class":66},"'document.pdf'",[49,2200,871],{"class":101},[49,2202,318],{"class":111},[49,2204,2205],{"class":101},"(extRegex)?.[",[49,2207,377],{"class":59},[49,2209,2210],{"class":101},"]);   ",[49,2212,2213],{"class":130},"\u002F\u002F 'pdf'\n",[49,2215,2216,2218,2220,2222,2225,2227,2229,2231,2233,2236],{"class":51,"line":134},[49,2217,108],{"class":101},[49,2219,112],{"class":111},[49,2221,121],{"class":101},[49,2223,2224],{"class":66},"'archive.tar.gz'",[49,2226,871],{"class":101},[49,2228,318],{"class":111},[49,2230,2205],{"class":101},[49,2232,377],{"class":59},[49,2234,2235],{"class":101},"]); ",[49,2237,2238],{"class":130},"\u002F\u002F 'gz'\n",[10,2240,2242],{"id":2241},"_20-social-security-number-ssn-validation","20. Social Security Number (SSN) Validation",[15,2244,2245],{},"Match the US SSN format (XXX-XX-XXXX) with valid range constraints.",[15,2247,2248,34,2250],{},[31,2249,33],{},[36,2251,2252],{},"\u002F^(?!000|666|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0000)\\d{4}$\u002F",[40,2254,2256],{"className":42,"code":2255,"language":44,"meta":45,"style":45},"const ssnRegex = \u002F^(?!000|666|9\\d{2})\\d{3}-(?!00)\\d{2}-(?!0000)\\d{4}$\u002F;\nconsole.log(ssnRegex.test('123-45-6789'));  \u002F\u002F true\nconsole.log(ssnRegex.test('000-45-6789'));  \u002F\u002F false (area 000 invalid)\n",[36,2257,2258,2312,2332],{"__ignoreMap":45},[49,2259,2260,2262,2265,2267,2269,2271,2274,2276,2279,2281,2284,2286,2288,2290,2292,2294,2297,2299,2301,2304,2306,2308,2310],{"class":51,"line":52},[49,2261,56],{"class":55},[49,2263,2264],{"class":59}," ssnRegex",[49,2266,63],{"class":55},[49,2268,67],{"class":66},[49,2270,70],{"class":55},[49,2272,2273],{"class":79},"(?!000",[49,2275,374],{"class":55},[49,2277,2278],{"class":79},"666",[49,2280,374],{"class":55},[49,2282,2283],{"class":79},"9",[49,2285,362],{"class":59},[49,2287,1886],{"class":55},[49,2289,247],{"class":79},[49,2291,362],{"class":59},[49,2293,509],{"class":55},[49,2295,2296],{"class":79},"-(?!00)",[49,2298,362],{"class":59},[49,2300,1886],{"class":55},[49,2302,2303],{"class":79},"-(?!0000)",[49,2305,362],{"class":59},[49,2307,532],{"class":55},[49,2309,98],{"class":66},[49,2311,102],{"class":101},[49,2313,2314,2316,2318,2321,2323,2325,2328,2330],{"class":51,"line":105},[49,2315,108],{"class":101},[49,2317,112],{"class":111},[49,2319,2320],{"class":101},"(ssnRegex.",[49,2322,118],{"class":111},[49,2324,121],{"class":101},[49,2326,2327],{"class":66},"'123-45-6789'",[49,2329,127],{"class":101},[49,2331,131],{"class":130},[49,2333,2334,2336,2338,2340,2342,2344,2347,2349],{"class":51,"line":134},[49,2335,108],{"class":101},[49,2337,112],{"class":111},[49,2339,2320],{"class":101},[49,2341,118],{"class":111},[49,2343,121],{"class":101},[49,2345,2346],{"class":66},"'000-45-6789'",[49,2348,127],{"class":101},[49,2350,2351],{"class":130},"\u002F\u002F false (area 000 invalid)\n",[10,2353,2355],{"id":2354},"performance-tips","Performance Tips",[2357,2358,2359,2374,2384,2390],"ol",{},[2360,2361,2362,2369,2370,2373],"li",{},[31,2363,2364,2365,2368],{},"Use ",[36,2366,2367],{},"RegExp.prototype.test()"," for boolean checks"," instead of ",[36,2371,2372],{},"String.prototype.match()"," — it is faster because it stops at the first match.",[2360,2375,2376,2379,2380,2383],{},[31,2377,2378],{},"Avoid catastrophic backtracking"," by replacing nested quantifiers like ",[36,2381,2382],{},"([^,]+,)+"," with atomic groups or possessive quantifiers where supported.",[2360,2385,2386,2389],{},[31,2387,2388],{},"Compile regex once and reuse"," — do not create the same regex inside a loop.",[2360,2391,2392,2395,2396,2399],{},[31,2393,2394],{},"Use raw strings in Python"," (the ",[36,2397,2398],{},"r"," prefix) to avoid escaping backslashes.",[10,2401,2403],{"id":2402},"common-pitfalls","Common Pitfalls",[2405,2406,2407,2423],"table",{},[2408,2409,2410],"thead",{},[2411,2412,2413,2417,2420],"tr",{},[2414,2415,2416],"th",{},"Mistake",[2414,2418,2419],{},"Wrong",[2414,2421,2422],{},"Correct",[2424,2425,2426,2442,2457,2472],"tbody",{},[2411,2427,2428,2432,2437],{},[2429,2430,2431],"td",{},"Unescaped dot",[2429,2433,2434],{},[36,2435,2436],{},".*\\.com",[2429,2438,2439],{},[36,2440,2441],{},".*\\\\.com",[2411,2443,2444,2447,2452],{},[2429,2445,2446],{},"Greedy matching",[2429,2448,2449],{},[36,2450,2451],{},"\".*\"",[2429,2453,2454],{},[36,2455,2456],{},"\".*?\"",[2411,2458,2459,2462,2467],{},[2429,2460,2461],{},"Missing anchors",[2429,2463,2464],{},[36,2465,2466],{},"\u002F[a-z]+\u002F",[2429,2468,2469],{},[36,2470,2471],{},"\u002F^[a-z]+$\u002F",[2411,2473,2474,2477,2482],{},[2429,2475,2476],{},"Not escaping in string",[2429,2478,2479],{},[36,2480,2481],{},"new RegExp('\\d')",[2429,2483,2484],{},[36,2485,2486],{},"new RegExp('\\\\d')",[10,2488,2490],{"id":2489},"test-your-patterns","Test Your Patterns",[15,2492,2493,2494,2499],{},"Use our free ",[2495,2496,2498],"a",{"href":2497},"\u002Ftools\u002Fregex-tester","Regex Tester"," to experiment with these patterns interactively.",[2501,2502,2503],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":45,"searchDepth":105,"depth":105,"links":2505},[2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529],{"id":12,"depth":105,"text":13},{"id":23,"depth":105,"text":24},{"id":196,"depth":105,"text":197},{"id":330,"depth":105,"text":331},{"id":456,"depth":105,"text":457},{"id":599,"depth":105,"text":600},{"id":747,"depth":105,"text":748},{"id":836,"depth":105,"text":837},{"id":966,"depth":105,"text":967},{"id":1058,"depth":105,"text":1059},{"id":1177,"depth":105,"text":1178},{"id":1276,"depth":105,"text":1277},{"id":1458,"depth":105,"text":1459},{"id":1568,"depth":105,"text":1569},{"id":1677,"depth":105,"text":1678},{"id":1778,"depth":105,"text":1779},{"id":1849,"depth":105,"text":1850},{"id":1950,"depth":105,"text":1951},{"id":2027,"depth":105,"text":2028},{"id":2143,"depth":105,"text":2144},{"id":2241,"depth":105,"text":2242},{"id":2354,"depth":105,"text":2355},{"id":2402,"depth":105,"text":2403},{"id":2489,"depth":105,"text":2490},"2026-05-26","20 essential regex patterns for email, URL, date, and password validation with JavaScript and Python examples.","md",{"immutable":2534},true,"\u002Fguides\u002Fcommon-regex-patterns",10,{"title":5,"description":2531},"guides\u002Fcommon-regex-patterns","7rJJ2W7waHqoucjj0kjhOs_JAz-nVdlKA-zyI0WpOi4",1780401322998]