参考资料
[偷米骑巴哥]正规式苦手超入门
大纲
Regex 实用工具使用情境常用旗帜 flag (g/i/m)常用 特殊标点字元 ( . , ^ , $ , \ , |)中括号 [ ] 用法 (限定範围)限定出现次数 ( * , + , {} )常用 缩写 (\d数字,\w,\s空白字元)一些範例
Regex 工具
RegexrRegex 101Regex 左上角可选择 程式语言 (Regex语法大多可共通)上两者可用来测试 Regex 与 结果,并含有 CheatSheetRegex CheatSheet
使用情境
表单验证 pattern 属性取代文字搜寻关键字 (VSCode内也可搜寻档案用)
常用的旗帜 flag (i/g/m)
g 全域 (Global)i 忽略大小写 (Case-Insensitive)m 多行文字 (multiline) 範例如下
const str = 'testA\ntestB\ntestC' // HeyA testB testC (只会取待第一个) console.log(str.replace(/test/, 'Hey')) // HeyA HeyB HeyC (取待所有找到的) console.log(str.replace(/test/g, 'Hey')) // HeyA testB testC (找test开头的,此时会无法找到各行开头) console.log(str.replace(/^test/g, 'Hey')) // HeyA HeyB HeyC (因此要找各行开头,必须待上 m flag) console.log(str.replace(/^test/gm, 'Hey'))
常用 特殊标点字元
(.) 点号 代表 任意字元,亦可为无(^test) 代表以 test 开头(test$) 代表以 test 结尾() 反斜线 代表 跳脱字元( 98 | 95 | 100 ) 直槓 代表 OR
中括号 [ ] 用法 (限定範围)
[b-z] 小写的 b 到 z[a-zA-Z] 同时包含大小写的 a 到 z[4-9] 4 到 9[a-z0-9] 中括号可以包括多个範围[^0-5] 在中括号中使用 ^ 代表 "排除"
限定出现次数 ( . / + / {} )
(*) 米字号 代表 任意 次数(+) 加号 代表 一 或 一次以上(?) 问号 代表 零 或 一次{2} 大括号 代表 限定次数{2,} 逗号 代表 至少要超过 2 个以上{,3} 逗号 代表 至多 3 个以上{2,9} 逗号 代表 至少 2 个 至多 9 个
const data = 'test\ntest1\ntest12\ntest123' // test+任意 1 个字元 const Plus1 = /test./gm // test 后可有 任意 个字元(可无) const Any = /test.*/gm // test 后需有 至少 1 个字元 const Over1 = /test.+/gm // test 后 可为 无字元 或 一个字元 const OneOrNone = /test.?/gm // test 后需有 2 个字元 const WithTwo = /test.{2}/gm // test 后至少有 2 个字元以上 (含2个) const OverTwo = /test.{2,}/gm // test 后至少 有 2 个字元 至多 9 个字元 const OverTwoLessNine = /test.{2,9}/gm
常用 缩写 (\d Digital \w Word \s Space)
\d 代表 数字 等同于 [0-9]\D 代表 非数字 等同于 [^0-9]\w 代表 数字、字母、底线 等同 [a-zA-Z0-9_]\W 代表 非 \w 等同 [^a-zA-Z0-9_]\s 代表 空白字元 等同 [\r\t\n\f]\S 代表 非 空白字元 等同 [^\r\t\n\f]\t 代表 TAB 键\n 代表 换行
範例
电话号码网址
// 以 09 开头 后接 8 个数字 const PhoneRegex = /^09[0-9]{8}$/ // ? 表前一个字可有可无 反斜线 和 . 要用跳脱字元 const urlRegex = /https?:\/\/[a-zA-Z0-9\.\/]+/