[{"data":1,"prerenderedAt":1008},["ShallowReactive",2],{"doc-page:\u002Fdocs\u002Fregex-cheatsheet":3},{"doc":4,"prev":973,"next":977,"resolvedType":8,"readingMinutes":492,"audience":984,"checklist":988,"related":992},{"path":5,"title":6,"description":7,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13,"body":14},"\u002Fdocs\u002Fregex-cheatsheet","正则表达式速查","正则表达式语法速查、常用模式、在线测试工具与各语言示例","article",null,"online-tools","在线工具","2026-02-27","i-carbon-tool-box",{"type":15,"value":16,"toc":943},"minimark",[17,20,24,28,31,47,50,53,211,214,299,302,312,316,322,325,329,343,347,356,360,369,372,381,385,394,398,407,411,420,423,427,594,598,694,698,764,766,817,820,824,827,847,851,854,858,861,872,875,889,892,912,915,939],[18,19,6],"h1",{"id":6},[21,22,23],"p",{},"这页适合作为“正则表达式从看得懂到写得稳”的速查表。正则的难点往往不在语法本身，而在于：你是否知道该用到什么程度、该怎么调试、什么时候应该停下来改用更可读的解析方式。",[25,26,27],"h2",{"id":27},"推荐掌握顺序",[21,29,30],{},"建议按下面顺序学习：",[32,33,34,38,41,44],"ol",{},[35,36,37],"li",{},"先记住字符类、量词、分组、边界",[35,39,40],{},"再掌握常见模式和替换",[35,42,43],{},"然后学习前瞻、后顾等断言",[35,45,46],{},"最后再处理跨语言差异和复杂表达式优化",[21,48,49],{},"先把“匹配什么”和“为什么多匹配 \u002F 少匹配”搞明白，比上来就写复杂断言更重要。",[25,51,52],{"id":52},"基础语法",[54,55,56,72],"table",{},[57,58,59],"thead",{},[60,61,62,66,69],"tr",{},[63,64,65],"th",{},"语法",[63,67,68],{},"说明",[63,70,71],{},"示例",[73,74,75,93,112,131,147,166,181,196],"tbody",{},[60,76,77,84,87],{},[78,79,80],"td",{},[81,82,83],"code",{},".",[78,85,86],{},"任意字符（除换行）",[78,88,89,92],{},[81,90,91],{},"a.c"," → abc, a1c",[60,94,95,100,106],{},[78,96,97],{},[81,98,99],{},"\\d",[78,101,102,103],{},"数字 ",[81,104,105],{},"[0-9]",[78,107,108,111],{},[81,109,110],{},"\\d+"," → 123",[60,113,114,119,125],{},[78,115,116],{},[81,117,118],{},"\\w",[78,120,121,122],{},"字母数字下划线 ",[81,123,124],{},"[a-zA-Z0-9_]",[78,126,127,130],{},[81,128,129],{},"\\w+"," → hello_1",[60,132,133,138,141],{},[78,134,135],{},[81,136,137],{},"\\s",[78,139,140],{},"空白字符",[78,142,143,146],{},[81,144,145],{},"a\\sb"," → a b",[60,148,149,161,164],{},[78,150,151,154,155,154,158],{},[81,152,153],{},"\\D"," ",[81,156,157],{},"\\W",[81,159,160],{},"\\S",[78,162,163],{},"上述取反",[78,165],{},[60,167,168,173,176],{},[78,169,170],{},[81,171,172],{},"^",[78,174,175],{},"行首",[78,177,178],{},[81,179,180],{},"^Hello",[60,182,183,188,191],{},[78,184,185],{},[81,186,187],{},"$",[78,189,190],{},"行尾",[78,192,193],{},[81,194,195],{},"world$",[60,197,198,203,206],{},[78,199,200],{},[81,201,202],{},"\\b",[78,204,205],{},"单词边界",[78,207,208],{},[81,209,210],{},"\\bword\\b",[25,212,213],{"id":213},"量词",[54,215,216,224],{},[57,217,218],{},[60,219,220,222],{},[63,221,65],{},[63,223,68],{},[73,225,226,236,246,256,266,276,286],{},[60,227,228,233],{},[78,229,230],{},[81,231,232],{},"*",[78,234,235],{},"0 次或多次",[60,237,238,243],{},[78,239,240],{},[81,241,242],{},"+",[78,244,245],{},"1 次或多次",[60,247,248,253],{},[78,249,250],{},[81,251,252],{},"?",[78,254,255],{},"0 次或 1 次",[60,257,258,263],{},[78,259,260],{},[81,261,262],{},"{n}",[78,264,265],{},"恰好 n 次",[60,267,268,273],{},[78,269,270],{},[81,271,272],{},"{n,}",[78,274,275],{},"至少 n 次",[60,277,278,283],{},[78,279,280],{},[81,281,282],{},"{n,m}",[78,284,285],{},"n 到 m 次",[60,287,288,296],{},[78,289,290,154,293],{},[81,291,292],{},"*?",[81,294,295],{},"+?",[78,297,298],{},"非贪婪匹配",[25,300,301],{"id":301},"分组与引用",[303,304,309],"pre",{"className":305,"code":307,"language":308},[306],"language-text","(abc)       捕获组\n(?:abc)     非捕获组\n(?\u003Cname>x)  命名捕获组\n\\1          反向引用第 1 组\n(a|b)       或\n","text",[81,310,307],{"__ignoreMap":311},"",[25,313,315],{"id":314},"断言lookaround","断言（Lookaround）",[303,317,320],{"className":318,"code":319,"language":308},[306],"(?=abc)     正向前瞻：后面是 abc\n(?!abc)     负向前瞻：后面不是 abc\n(?\u003C=abc)    正向后顾：前面是 abc\n(?\u003C!abc)    负向后顾：前面不是 abc\n",[81,321,319],{"__ignoreMap":311},[25,323,324],{"id":324},"常用模式",[326,327,328],"h3",{"id":328},"邮箱",[303,330,334],{"className":331,"code":332,"language":333,"meta":311,"style":311},"language-regex shiki shiki-themes github-light github-dark","[\\w.+-]+@[\\w-]+\\.[\\w.]+\n","regex",[81,335,336],{"__ignoreMap":311},[337,338,341],"span",{"class":339,"line":340},"line",1,[337,342,332],{},[326,344,346],{"id":345},"url","URL",[303,348,350],{"className":331,"code":349,"language":333,"meta":311,"style":311},"https?:\u002F\u002F[\\w\\-._~:\u002F?#\\[\\]@!$&'()*+,;=%]+\n",[81,351,352],{"__ignoreMap":311},[337,353,354],{"class":339,"line":340},[337,355,349],{},[326,357,359],{"id":358},"ip-地址","IP 地址",[303,361,363],{"className":331,"code":362,"language":333,"meta":311,"style":311},"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b\n",[81,364,365],{"__ignoreMap":311},[337,366,367],{"class":339,"line":340},[337,368,362],{},[326,370,371],{"id":371},"中文字符",[303,373,375],{"className":331,"code":374,"language":333,"meta":311,"style":311},"[\\u4e00-\\u9fa5]+\n",[81,376,377],{"__ignoreMap":311},[337,378,379],{"class":339,"line":340},[337,380,374],{},[326,382,384],{"id":383},"手机号中国大陆","手机号（中国大陆）",[303,386,388],{"className":331,"code":387,"language":333,"meta":311,"style":311},"1[3-9]\\d{9}\n",[81,389,390],{"__ignoreMap":311},[337,391,392],{"class":339,"line":340},[337,393,387],{},[326,395,397],{"id":396},"html-标签","HTML 标签",[303,399,401],{"className":331,"code":400,"language":333,"meta":311,"style":311},"\u003C[^>]+>\n",[81,402,403],{"__ignoreMap":311},[337,404,405],{"class":339,"line":340},[337,406,400],{},[326,408,410],{"id":409},"日期yyyy-mm-dd","日期（YYYY-MM-DD）",[303,412,414],{"className":331,"code":413,"language":333,"meta":311,"style":311},"\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])\n",[81,415,416],{"__ignoreMap":311},[337,417,418],{"class":339,"line":340},[337,419,413],{},[25,421,422],{"id":422},"各语言示例",[326,424,426],{"id":425},"javascript","JavaScript",[303,428,431],{"className":429,"code":430,"language":425,"meta":311,"style":311},"language-javascript shiki shiki-themes github-light github-dark","const regex = \u002F\\d+\u002Fg;\nconst matches = \"abc123def456\".match(regex); \u002F\u002F ['123', '456']\n\n\u002F\u002F 命名捕获组\nconst dateRegex = \u002F(?\u003Cyear>\\d{4})-(?\u003Cmonth>\\d{2})-(?\u003Cday>\\d{2})\u002F;\nconst { groups } = \"2026-02-27\".match(dateRegex);\n\u002F\u002F groups.year === '2026'\n",[81,432,433,464,490,497,503,561,588],{"__ignoreMap":311},[337,434,435,439,443,446,450,452,454,457,460],{"class":339,"line":340},[337,436,438],{"class":437},"szBVR","const",[337,440,442],{"class":441},"sj4cs"," regex",[337,444,445],{"class":437}," =",[337,447,449],{"class":448},"sZZnC"," \u002F",[337,451,99],{"class":441},[337,453,242],{"class":437},[337,455,456],{"class":448},"\u002F",[337,458,459],{"class":437},"g",[337,461,463],{"class":462},"sVt8B",";\n",[337,465,467,469,472,474,477,479,483,486],{"class":339,"line":466},2,[337,468,438],{"class":437},[337,470,471],{"class":441}," matches",[337,473,445],{"class":437},[337,475,476],{"class":448}," \"abc123def456\"",[337,478,83],{"class":462},[337,480,482],{"class":481},"sScJk","match",[337,484,485],{"class":462},"(regex); ",[337,487,489],{"class":488},"sJ8bj","\u002F\u002F ['123', '456']\n",[337,491,493],{"class":339,"line":492},3,[337,494,496],{"emptyLinePlaceholder":495},true,"\n",[337,498,500],{"class":339,"line":499},4,[337,501,502],{"class":488},"\u002F\u002F 命名捕获组\n",[337,504,506,508,511,513,515,519,522,525,527,530,533,536,538,540,543,545,548,550,552,554,557,559],{"class":339,"line":505},5,[337,507,438],{"class":437},[337,509,510],{"class":441}," dateRegex",[337,512,445],{"class":437},[337,514,449],{"class":448},[337,516,518],{"class":517},"sA_wV","(?\u003C",[337,520,521],{"class":462},"year",[337,523,524],{"class":517},">",[337,526,99],{"class":441},[337,528,529],{"class":437},"{4}",[337,531,532],{"class":517},")-(?\u003C",[337,534,535],{"class":462},"month",[337,537,524],{"class":517},[337,539,99],{"class":441},[337,541,542],{"class":437},"{2}",[337,544,532],{"class":517},[337,546,547],{"class":462},"day",[337,549,524],{"class":517},[337,551,99],{"class":441},[337,553,542],{"class":437},[337,555,556],{"class":517},")",[337,558,456],{"class":448},[337,560,463],{"class":462},[337,562,564,566,569,572,575,578,581,583,585],{"class":339,"line":563},6,[337,565,438],{"class":437},[337,567,568],{"class":462}," { ",[337,570,571],{"class":441},"groups",[337,573,574],{"class":462}," } ",[337,576,577],{"class":437},"=",[337,579,580],{"class":448}," \"2026-02-27\"",[337,582,83],{"class":462},[337,584,482],{"class":481},[337,586,587],{"class":462},"(dateRegex);\n",[337,589,591],{"class":339,"line":590},7,[337,592,593],{"class":488},"\u002F\u002F groups.year === '2026'\n",[326,595,597],{"id":596},"python","Python",[303,599,602],{"className":600,"code":601,"language":596,"meta":311,"style":311},"language-python shiki shiki-themes github-light github-dark","import re\n\nmatches = re.findall(r'\\d+', 'abc123def456')  # ['123', '456']\n\n# 替换\nresult = re.sub(r'\\s+', ' ', 'hello   world')  # 'hello world'\n",[81,603,604,612,616,650,654,659],{"__ignoreMap":311},[337,605,606,609],{"class":339,"line":340},[337,607,608],{"class":437},"import",[337,610,611],{"class":462}," re\n",[337,613,614],{"class":339,"line":466},[337,615,496],{"emptyLinePlaceholder":495},[337,617,618,621,623,626,629,632,634,636,638,641,644,647],{"class":339,"line":492},[337,619,620],{"class":462},"matches ",[337,622,577],{"class":437},[337,624,625],{"class":462}," re.findall(",[337,627,628],{"class":437},"r",[337,630,631],{"class":448},"'",[337,633,99],{"class":441},[337,635,242],{"class":437},[337,637,631],{"class":448},[337,639,640],{"class":462},", ",[337,642,643],{"class":448},"'abc123def456'",[337,645,646],{"class":462},")  ",[337,648,649],{"class":488},"# ['123', '456']\n",[337,651,652],{"class":339,"line":499},[337,653,496],{"emptyLinePlaceholder":495},[337,655,656],{"class":339,"line":505},[337,657,658],{"class":488},"# 替换\n",[337,660,661,664,666,669,671,673,675,677,679,681,684,686,689,691],{"class":339,"line":563},[337,662,663],{"class":462},"result ",[337,665,577],{"class":437},[337,667,668],{"class":462}," re.sub(",[337,670,628],{"class":437},[337,672,631],{"class":448},[337,674,137],{"class":441},[337,676,242],{"class":437},[337,678,631],{"class":448},[337,680,640],{"class":462},[337,682,683],{"class":448},"' '",[337,685,640],{"class":462},[337,687,688],{"class":448},"'hello   world'",[337,690,646],{"class":462},[337,692,693],{"class":488},"# 'hello world'\n",[326,695,697],{"id":696},"powershell","PowerShell",[303,699,702],{"className":700,"code":701,"language":696,"meta":311,"style":311},"language-powershell shiki shiki-themes github-light github-dark","# 匹配\n'abc123' -match '\\d+'\n$Matches[0]  # '123'\n\n# 替换\n'hello   world' -replace '\\s+', ' '  # 'hello world'\n",[81,703,704,709,720,737,741,745],{"__ignoreMap":311},[337,705,706],{"class":339,"line":340},[337,707,708],{"class":488},"# 匹配\n",[337,710,711,714,717],{"class":339,"line":466},[337,712,713],{"class":448},"'abc123'",[337,715,716],{"class":437}," -match",[337,718,719],{"class":448}," '\\d+'\n",[337,721,722,725,728,731,734],{"class":339,"line":492},[337,723,724],{"class":441},"$Matches",[337,726,727],{"class":462},"[",[337,729,730],{"class":441},"0",[337,732,733],{"class":462},"]  ",[337,735,736],{"class":488},"# '123'\n",[337,738,739],{"class":339,"line":499},[337,740,496],{"emptyLinePlaceholder":495},[337,742,743],{"class":339,"line":505},[337,744,658],{"class":488},[337,746,747,749,752,755,758,761],{"class":339,"line":563},[337,748,688],{"class":448},[337,750,751],{"class":437}," -replace",[337,753,754],{"class":448}," '\\s+'",[337,756,757],{"class":437},",",[337,759,760],{"class":448}," ' '",[337,762,763],{"class":488},"  # 'hello world'\n",[25,765,11],{"id":11},[54,767,768,777],{},[57,769,770],{},[60,771,772,775],{},[63,773,774],{},"工具",[63,776,68],{},[73,778,779,793,805],{},[60,780,781,790],{},[78,782,783],{},[784,785,789],"a",{"href":786,"rel":787},"https:\u002F\u002Fregex101.com\u002F",[788],"nofollow","regex101",[78,791,792],{},"最强正则测试工具，支持多语言",[60,794,795,802],{},[78,796,797],{},[784,798,801],{"href":799,"rel":800},"https:\u002F\u002Fregexr.com\u002F",[788],"regexr",[78,803,804],{},"可视化正则编辑器",[60,806,807,814],{},[78,808,809],{},[784,810,813],{"href":811,"rel":812},"https:\u002F\u002Fregexper.com\u002F",[788],"RegExper",[78,815,816],{},"正则可视化图表",[25,818,819],{"id":819},"常见问题",[326,821,823],{"id":822},"明明匹配到了但结果不对","明明匹配到了，但结果不对",[21,825,826],{},"高频原因通常包括：",[828,829,830,836,841,844],"ul",{},[35,831,832,835],{},[81,833,834],{},".*"," 太贪婪",[35,837,838,839],{},"忘了加边界，例如 ",[81,840,202],{},[35,842,843],{},"多行 \u002F 单行模式与预期不一致",[35,845,846],{},"在字符串字面量里少写或多写了转义",[326,848,850],{"id":849},"在线能用代码里失效","在线能用，代码里失效",[21,852,853],{},"这通常是因为不同语言的正则实现存在细节差异，或者字符串本身需要二次转义。例如 JavaScript 和 Python 在字面量写法上就不完全一样。",[326,855,857],{"id":856},"正则越来越长自己都看不懂","正则越来越长，自己都看不懂",[21,859,860],{},"这往往说明表达式已经超出“易维护”的范围。可以考虑：",[828,862,863,866,869],{},[35,864,865],{},"拆成多段处理",[35,867,868],{},"增加注释或命名分组",[35,870,871],{},"对结构化数据改用真正的解析器，而不是只靠正则硬匹配",[25,873,874],{"id":874},"编写建议",[828,876,877,880,886],{},[35,878,879],{},"先写最小可用版本，再逐步加限制条件",[35,881,882,883,885],{},"在 ",[81,884,789],{}," 这类工具里用多个正例和反例一起验证",[35,887,888],{},"处理用户输入时，注意性能和 ReDoS 风险，不要写无限回溯型表达式",[25,890,891],{"id":891},"延伸阅读",[828,893,894,900,906],{},[35,895,896],{},[784,897,899],{"href":898},"\u002Fdocs\u002Fapi-testing","API 测试与调试",[35,901,902],{},[784,903,905],{"href":904},"\u002Fdocs\u002Fshell-scripting","Shell 脚本入门",[35,907,908],{},[784,909,911],{"href":910},"\u002Fdocs\u002Ftypescript-tips","TypeScript 实用技巧",[25,913,914],{"id":914},"参考链接",[828,916,917,923,931],{},[35,918,919,922],{},[784,920,789],{"href":786,"rel":921},[788]," — 在线测试",[35,924,925,930],{},[784,926,929],{"href":927,"rel":928},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FGuide\u002FRegular_expressions",[788],"MDN 正则表达式"," — JavaScript 正则",[35,932,933,938],{},[784,934,937],{"href":935,"rel":936},"https:\u002F\u002Fdocs.python.org\u002F3\u002Flibrary\u002Fre.html",[788],"Python re 模块"," — 官方文档",[940,941,942],"style",{},"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 .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 .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 pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":311,"searchDepth":466,"depth":466,"links":944},[945,946,947,948,949,950,959,964,965,970,971,972],{"id":27,"depth":466,"text":27},{"id":52,"depth":466,"text":52},{"id":213,"depth":466,"text":213},{"id":301,"depth":466,"text":301},{"id":314,"depth":466,"text":315},{"id":324,"depth":466,"text":324,"children":951},[952,953,954,955,956,957,958],{"id":328,"depth":492,"text":328},{"id":345,"depth":492,"text":346},{"id":358,"depth":492,"text":359},{"id":371,"depth":492,"text":371},{"id":383,"depth":492,"text":384},{"id":396,"depth":492,"text":397},{"id":409,"depth":492,"text":410},{"id":422,"depth":466,"text":422,"children":960},[961,962,963],{"id":425,"depth":492,"text":426},{"id":596,"depth":492,"text":597},{"id":696,"depth":492,"text":697},{"id":11,"depth":466,"text":11},{"id":819,"depth":466,"text":819,"children":966},[967,968,969],{"id":822,"depth":492,"text":823},{"id":849,"depth":492,"text":850},{"id":856,"depth":492,"text":857},{"id":874,"depth":466,"text":874},{"id":891,"depth":466,"text":891},{"id":914,"depth":466,"text":914},{"path":974,"title":975,"description":976,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Fweb-scraping","网页抓取与自动化","Puppeteer、Playwright、curl 抓取技巧与反爬应对",{"path":978,"title":979,"description":980,"docType":8,"resourceKind":9,"categoryId":981,"categoryLabel":982,"updatedAt":12,"publishedAt":12,"icon":983},"\u002Fdocs\u002Flive-recording","直播录制工具","抖音、TikTok、YouTube、Nico、B站等平台直播录制工具汇总","media-creation","媒体与创作","i-carbon-media-library",[985,986,987],"希望把零散经验整理成长期可复用工作流的人","希望快速筛选在线服务并减少信息噪音的人","希望阅读时顺手建立自己的操作清单或收藏体系的人",[989,990,991],"先浏览标题、摘要和目录，带着问题阅读会更高效","确认要上传的数据是否敏感，并优先使用临时数据做首次验证","如果页面里提到相关文档，尽量一起打开对照，效果通常更完整",[993,998,1003,1004],{"path":994,"title":995,"description":996,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":997,"publishedAt":997,"icon":13},"\u002Fdocs\u002Fbrowser-extensions","浏览器扩展推荐","开发调试、效率提升、隐私安全与阅读增强场景下的浏览器扩展选择建议","2026-03-10",{"path":999,"title":1000,"description":1001,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1002,"publishedAt":1002,"icon":13},"\u002Fdocs\u002Fdesign-resources","设计资源与工具","配色工具、UI 组件库、设计灵感、免费素材与原型工具","2026-02-28",{"path":974,"title":975,"description":976,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},{"path":1005,"title":1006,"description":1007,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Ffont-icon-resources","字体与图标资源","开发常用字体、图标库、Web 字体加载优化与自托管方案",1776215714056]