• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

超级飞燕

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

正则表达式

正则表达式 正则校验 正则匹配方法 常用元字符 量词 指定匹配字符数量 标识符(修饰符)常用正则表达式

正则校验

正则表达式

/元字符/标识符

;/^\d{3}$/g

正则匹配方法

  1. reg.test('str') 匹配字符串中指定的值。
  2. reg.exec('str') 捕获字符串中指定的值。
  3. str.search(reg) 搜索字符串内满足条件的字符串
  4. str.replace(reg) 替换字符串内满足条件的字符串
  5. str.match(reg) 捕获字符串内满足条件的字符串

1. reg.test('str')

test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

const reg = /^\d{3}$/ // 三个数字
const res = reg.test('113') // 匹配三个数字
console.log(res) // true
const res1 = reg.test('11311')
console.log(res1) // false
const res2 = reg.test('abc')
console.log(res2) // false

2. reg.exec('str')

reg.exec 捕获字符串中满足正则的第一个子字符串
exec() 检索字符串中指定的值。返回找到的值,并确定其位置。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

// g全局匹配------返回第一个匹配到的值
const reg111=/[a-z]{3}/g
const res4=reg111.exec('1234abc123')
console.log(res4)//[ 'abc', index: 4, input: '1234abc123', groups: undefined ]
const reg=/\d{3}/g
const res3=reg.exec('aaa456')
console.log(res3)// [ '456', index: 9, input: 'aaabbbbbb456', groups: undefined ]
const res=reg.exec('aaa123bbb')
console.log(res) // null
const res2=reg.exec('12345aaa123bbb456ccc')
console.log(res2) // [ '123', index: 0, input: '12345aaa123bbb456ccc', groups: undefined ]
const res1=reg.exec('123456aaa')
console.log(res1) // [ '456', index: 3, input: '123456aaa', groups: undefined ]
reg.exec()使用/\d{3}/g全局检索,会出现以下问题
// 如果使用reg.exec检索字符串一次,不会出现任何问题
// 如果使用reg.exec()一个模式多次检索字符串,后面的检索依赖前面检索的结果
//     reg.exec()第一次检索字符串,如果检索成功,第二次将会从上一次检索成功的字符串索引开始,向后继续检索,如果后面没有检索到匹配结果返回null,如果检索成功返回匹配结果
//     reg.exec()第一次检索字符串,如果检索失败,第二次检索相当于第一次检索

// 非全局匹配------返回第一个匹配到的值
const reg=/\d{3}/
const res=reg.exec('aaa123bbb456')
console.log(res) // [ '123', index: 3, input: 'aaa123', groups: undefined ]
const res2=reg.exec('144aaa123bbb456ccc')
console.log(res2) // [ '144', index: 0, input: '144aaa', groups: undefined ]

3. str.search(reg)

检索字符串内满足条件字符串。检索成功,返回满足条件的第一个字符串的索引。检索失败返回 -1

const reg = /\d{3}/g
const res = 'aa12abbb456cccbbb'.search(reg)
console.log(res) //8
const res1 = 'aaa123aaabb456bbbb'.search(reg)
console.log(res1) //3
const res2 = 'aaaaaabbbbbb'.search(reg)
console.log(res2) //-1

4. str.replace(reg)

替换字符串内满足条件的字符串,返回替换后的字符串

// g全局匹配------替换所有满足条件的字符串
const reg = /\d{3}/g
const res = 'aa12abbb456cccbbb'.replace(reg, '***')
console.log(res) //aa12abbb***cccbbb
const res1 = 'aaa123aaabb456bbbb'.replace(reg, '***')
console.log(res1) //aaa***aaabb***bbbb
const res2 = 'aaaaaabbbbbb'.replace(reg, '***')
console.log(res2) //aaaaaabbbbbb

// 非全局匹配------替换第一个满足条件的字符串
const reg = /\d{3}/
const res = 'aa12abbb456cccbbb'.replace(reg, '***')
console.log(res) //aa12abbb***cccbbb
const res1 = 'aaa123aaabb456bbbb'.replace(reg, '***')
console.log(res1) //aaa***aaabb456bbbb
const res2 = 'aaaaaabbbbbb'.replace(reg, '***')
console.log(res2) //aaaaaabbbbbb

5. str.match(reg)

捕获字符串内满足条件的字符串。捕获成功,返回一个数组,其中存放匹配成功的结果。捕获失败返回 null

// g全局匹配------返回所有满足条件的字符串
const reg = /\d{3}/g
const res = 'aa12abbb456cccbbb'.match(reg)
console.log(res) //[ '456' ]
const res1 = 'aaa123aaabb456bbbb'.match(reg)
console.log(res1) //[ '123', '456' ]
const res2 = 'aaaaaabbbbbb'.match(reg)
console.log(res2) //null

// 非全局匹配------返回第一个满足条件的字符串
const reg = /\d{3}/
const res = 'aa12abbb456cccbbb'.match(reg)
console.log(res) //[ '456', index: 8, input: 'aa12abbb456cccbbb', groups: undefined ]
const res1 = 'aaa123aaabb456bbbb'.match(reg)
console.log(res1) //[ '123', index: 3, input: 'aaa123aaabb456bbbb', groups: undefined ]
const res2 = 'aaaaaabbbbbb'.match(reg)
console.log(res2) //null

常用元字符

  1. /^xxx/ 表示以 xxx 开始
  2. /xxx$/ 表示以 xxx 结束
  3. . 查找单个字符,除了换行和行结束符
  4. \w 查找数字、字母及下划线
  5. \W 查找非单词字符
  6. \d 查找数字
  7. \D 查找非数字字符
  8. \s 查找空白字符
  9. \S 查找非空白字符

/^xxx/ 表示以 xxx 开始

// /^xxx/ 表示以 xxx 开始---字符串以xxx开头返回true,否则返回false
const reg = /^\d/ //匹配数字开头的字符串
const res = reg.test('aaa')
console.log(res) //false
const res1 = reg.test('111')
console.log(res1) //true

/xxx$/ 表示以 xxx 结束

// /xxx$/ 表示以 xxx 结束---字符串以xxx结束返回true,否则返回false
const reg = /\d$/ //匹配数字结尾的字符串
const res = reg.test('aaa')
console.log(res) //false
const res1 = reg.test('111')
console.log(res1) //true

. 查找单个字符,除了换行和行结束符。

// . 查找任意字符,除了换行和行结束符。---字符串包含除了换行和行结束符以外的任意字符返回true,否则返回false
const reg = /./ //匹配任意字符字符
const res = reg.test('a')
console.log(res) //true
const res1 = reg.test('1')
console.log(res1) //true
const res2 = reg.test('111')
console.log(res2) //true
const res2 = reg.test(' ')
console.log(res2) //true

\w 查找数字、字母及下划线。

// \w 查找数字、字母及下划线。---字符串包含数字、字母、下划线字符返回true,否则返回false
const reg = /\w/ //匹配任意字符字符
const res = reg.test('aaa')
console.log(res) //true
const res1 = reg.test('111')
console.log(res1) //true
const res2 = reg.test('___')
console.log(res2) //true
const res3 = reg.test('***')
console.log(res3) //false

\W 查找非单词字符。

// \W 查找非单词(数字、字母及下划线)字符。---字符串包含非数字、字母、下划线字符返回true,否则返回false
const reg = /\W/ //匹配任意字符字符
const res = reg.test('aaa')
console.log(res) //false
const res1 = reg.test('111')
console.log(res1) //false
const res2 = reg.test('___')
console.log(res2) //false
const res3 = reg.test('***')
console.log(res3) //true

\d 查找数字。

// \d 查找数字。---字符串中包含数字字符返回true,不包含数字返回false
const reg = /\d/ //匹配字符
const res = reg.test('a')
console.log(res) //false
const res1 = reg.test('aaa111bbb')
console.log(res1) //true
const res2 = reg.test('111')
console.log(res2) //true

\D 查找非数字字符。

// \D 查找非数字字符。---字符串中包含非数字字符返回true,不包含数字返回false
const reg = /\D/ //匹配字符
const res = reg.test('a')
console.log(res) //true
const res1 = reg.test('aaa111bbb')
console.log(res1) //true
const res2 = reg.test('111')
console.log(res2) //false

\s 查找空白字符。

// \s 查找空白字符。---字符串中包含空白字符返回true,不包含数字返回false
const reg = /\s/ //匹配字符
const res = reg.test('a')
console.log(res) //false
const res1 = reg.test('aaa111bbb ')
console.log(res1) //true
const res2 = reg.test('111')
console.log(res2) //false

\S 查找非空白字符。

// \S 查找非空白字符。---字符串中包含非空白字符返回true,不包含数字返回false
const reg = /\s/ //匹配字符
const res = reg.test('a')
console.log(res) //false
const res1 = reg.test('aaa111bbb   ')
console.log(res1) //true
const res2 = reg.test('   ')
console.log(res2) //true

[] 指定查找范围

[abc] 查找方括号之间的任何字符
[^abc] 查找任何不在方括号之间的字符。
[0-9] 查找 0-9 的任意数字字符
[^0-9] 查找 0-9 意外的任意字符
[a-z] 查找 a-z 的任意字符
[^a-z] 查找 a-z 意外的任意字符
[A-Z] 查找 A-Z 的任意字符
[^a-z] 查找 A-Z 意外的任意字符

// [abc] 查找方括号之间的任何字符---字符串中包含[]内的字符返回true,不包含数字返回false
const reg = /[abc]/ //匹配字符
const res = reg.test('a')
console.log(res) //true
const res1 = reg.test('aaa111bbb')
console.log(res1) //true
const res2 = reg.test('111')
console.log(res2) //false
// [^abc] 查找任何不在方括号之间的字符。---字符串中包含非[]内字符返回true,不包含数字返回false
const reg = /[^abc]/ //匹配字符
const res = reg.test('a')
console.log(res) //false
const res1 = reg.test('aaa111bbb')
console.log(res1) //true
const res2 = reg.test('111')
console.log(res2) //true
// [0-9] 查找 0-9 的任意数字字符
const reg = /[0-9]/ //匹配字符
const res = reg.test('a')
console.log(res) //false
const res1 = reg.test('aaa111bbb')
console.log(res1) //true
const res2 = reg.test('111')
console.log(res2) //true
// [^0-9] 查找 0-9 意外的任意字符
const reg = /[^0-9]/ //匹配字符
const res = reg.test('a')
console.log(res) //true
const res1 = reg.test('aaa111bbb')
console.log(res1) //true
const res2 = reg.test('111')
console.log(res2) //false

量词 指定匹配字符数量

n+
匹配任何包含至少一个 n的字符串。

例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。

n*
匹配任何包含零个或多个 n的字符串。

例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。

n?
匹配任何包含零个或一个 n 的字符串。

例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。

n{X}
匹配包含 X 个 n 的序列的字符串。

例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配 "caaandy." 中的前两个 "a"。

n{X,}
X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。

例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。

n{X,Y}
X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。

例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。

?=no
/abc(?=no)/匹配 abc 其后紧接指定字符串 no的字符串。

?!no
/abc(?!no)/匹配 abc其后没有紧接指定字符串 no 的字符串。

标识符(修饰符)

i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)

常用正则表达式

1. Email 地址:/^\w+([-+.]\w+)_@\w+([-.]\w+)_\.\w+([-.]\w+)\*\$/
2. 域名:/[a-zA-Z0-9][-a-za-z0-9]{0,62}(/.[a-zA-Z0-9][-a-za-z0-9]{0,62})+/.?/
3. InternetURL:/[a-zA-z]+://[^\s]_ 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]_)?\$/
4. 手机号码:/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}\$/
5. 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"):/^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}\$/
6. 国内电话号码(0511-4405222、021-87888822):/\d{3}-\d{8}|\d{4}-\d{7}/
7. 身份证号(15 位、18 位数字):/^\d{15}|\d{18}\$/
8. 短身份证号码(数字、字母 x 结尾):/^([0-9]){7,18}(x|X)?$/ 或 /^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$/
9. 帐号是否合法(字母开头,允许 5-16 字节,允许字母数字下划线):/^[a-zA-Z][a-za-z0-9_]{4,15}\$/
10. 密码(以字母开头,长度在 6~18 之间,只能包含字母、数字和下划线):/^[a-zA-Z]\w{5,17}\$/
11. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):/^(?=._\d)(?=._[a-z])(?=.\*[A-Z]).{8,10}\$/
12. 日期格式:/^\d{4}-\d{1,2}-\d{1,2}/
13. 一年的 12 个月(01 ~ 09 和 1 ~ 12):/^(0?[1-9]|1[0-2])\$/
14. 一个月的 31 天(01 ~ 09 和 1 ~ 31):/^((0?[1-9])|((1|2)[0-9])|30|31)\$/
15. 中文字符的正则表达式:/[\u4e00-\u9fa5]/
16. 双字节字符:/[^\x00-\xff]/(<包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)>)
17. 腾讯 QQ 号:/[1-9][0-9]{4,}/ (腾讯 QQ 号从 10000 开始)
18. 中国邮政编码:/[1-9]\d{5}(?!\d)/ (中国邮政编码为 6 位数字)
19. IP 地址:/\d+\.\d+\.\d+\.\d+/ (提取 IP 地址时有用)
20. IP 地址:/((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/

posted on 2022-04-01 10:46  超级飞燕  阅读(187)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3