# 正则表达式

# 正则表达式快速入门

# 创建方式

创建正则方式通常有两种:

  1. var reg = /abc/
  2. var reg = new RegExp("abc","i") //规则 ,修饰符

# 修饰符

  • reg = /abc/i ,忽略大小小
  • /abc/m多行匹配
  • /abc/g 全局匹配

# 表达式

  1. 方括号: [] 代表取符合范围的一个数

例如: [0-9] 0 到 9 [abc] a 到 c [0-9A-z]

var reg = /[1-3]/g;
var str = "123dasdasdasd123123123asdasdasdas";
  1. 表达式里面^代表非
var reg = /[^a][^b]/g var str = "abcdef"
str.match(reg) = ["bc","cd","de","ef"]
  1. var reg = /(abc|bcd)/g ,abc 或 bcd

# 元字符

  • \w : var reg = /\w/g 单词字符 \w=[0-9A-z] \W = [^\w]
  • \d : var reg = \d 数字 \d = [0-9] \D = [^\w]
  • \s: 查找空白字符 \s = [\t\n\r\v\f ] \S = [^\s]
  • \b : 单词边界
  • \B: 非单词边界
  • \t: tab 空格,但是不能匹配视觉的 table var = /\tabc/ 才能匹配
  • \u: unicode 编码 \u0000 十六进制,\uffff:u 后面两位代表层级,一共有 16 层,可以匹配汉字
  • . : .代表除了换行和结束符 var reg = /./g .===[^\r\n]

表达式区间代表一切区间的写法:

利用补集合集合 :例如 var reg = /[\s\S]/g

# 量词

-- n+ : {1,正无穷} var reg = /\w+/g +代表可以 1 次和多次,单词

  • n*: {0,正无穷}
var reg = /\w*/g;
var str = "abc";
str.match(reg) = ["abc", ""]; //记得考虑会有匹配就是空的情况
  • n? {0,1} var reg = /\w?/g
  • n{X}: {count} 匹配 count 次 var reg = /\w{3}/
  • n{x,y}: {x,y} 次
  • n$ 结尾
  • n^ 开头

# 函数

  • test() : reg.test(str),正则表达式测试你这个字符串到底有没有我这个规则的字符串

  • exec(): reg.exec(str),搜索符合该规则的字符串并返回完整的信息(类数组),每次返回的是 reg.lastIndex 也就是说符合规则的字符有很多,它按游标的形式向右匹配,index 返回的lastIndex,如果没有/g 修饰符,index 永远等于 0

var reg = /ab/g;
var str = "abababab";
console.log(reg.exec(str)); // index = 0
console.log(reg.exec(str)); // index = 2
  • 字符串的 match 方法:找出符合正则的字符串片段数组
  • 字符串的 replace 方法: str.replace(reg,str) ,替换匹配的字符串
var str = "abcdeabababa";
console.log(str.match(/ab/g)); //[ab,ab,ab,ab]

# 例题

  1. 检验字符串首尾是否含有数字:首或尾有数字
var reg = /^\d|\d$/g;
  1. 首尾都有数字

拉伸区间次数(中间插入[\s\S]* 代表任意字符)

var reg = /^\d[\s\S]*\d$/g;
  1. 匹配类似 xxxx 的字符串 例如"aaaabbbbc" 返回 ["aaaa","bbbb"]

(\w)\1 \1 代表反向引用,直接拷贝一份引用,意思就是前两个都是单词并且相等,所以上述规则成立

var reg = /(\w)\1\1\1/g; //
  1. 匹配 aabb 式
var reg = /(\w)\1(\w)\2/g;

# 常用的正则表达式收集

更完整的正则表达式地址 (opens new window)

验证数字的正则表达式集

验证数字:^[0-9]*$

验证n位的数字:^\d{n}$

验证至少n位数字:^\d{n,}$

验证m-n位的数字:^\d{m,n}$

验证零和非零开头的数字:^(0|[1-9][0-9]*)$

验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$

验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$

验证非零的正整数:^\+?[1-9][0-9]*$

验证非零的负整数:^\-[1-9][0-9]*$

验证非负整数(正整数 + 0^\d+$

验证非正整数(负整数 + 0^((-\d+)|(0+))$

验证长度为3的字符:^.{3}$

验证由26个英文字母组成的字符串:^[A-Za-z]+$

验证由26个大写英文字母组成的字符串:^[A-Z]+$

验证由26个小写英文字母组成的字符串:^[a-z]+$

验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

验证由数字、26个英文字母或者下划线组成的字符串:^\w+$

验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。

验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+

验证汉字:^[\u4e00-\u9fa5],{0,}$

验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$

验证电话号码:^(\d3,4\d3,4|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXX。

验证身份证号(15位或18位数字):^\d{15}|\d{}18$

验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01-09”和“1”“12”

验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:0109131。

整数:^-?\d+$

非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$

正浮点数 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

非正浮点数(负浮点数 + 0^((-\d+(\.\d+)?)|(0+(\.0+)?))$

负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

浮点数 ^(-?\d+)(\.\d+)?$

# 附录

匹配手机

function checkPhone() {
  if (!/^1[345678]\d{9}$/.test(phone)) {
    alert("手机号码有误,请重填");
    return false;
  }
}

去除字符串中的数字

var string = 'func56t9i10on'

var number = string.replace(/[^0-9]/ig, '')

number 结果 "56910"


var reg = /[1-9][0-9]*/g

var string = 'func56t9i10on'

var number = string.match(reg)

number  结果 ["56", "9", "10"]

var string2 = 'func5678tion'

string2.match(reg) 结果 ["5678"]

Last update: 7/20/2021, 8:53:54 AM