记给自己看的正则表达式

正则表达式

只对字符串匹配起作用

正则的创建方式

  • 字面量创建(双斜杠)
/\d+/
  • new RegExp(pathern[,flags])

pathern:必传参数,以\\开关,

new RegExp("\\d+",i)

flags:匹配模式g,i,m

正则表达式方法

/*常用正则方法*/

//1,test()方法用于检测一个字符串是否满足某个模式,有则返回true,无返回false
"lihai".test(/i+/g)//true


//2.exec()方法用于匹配字符串,该函数返回一个数组。如果未找到时返回null
//注意:exec方法要连续匹配才能返回所有满足模式的字符串
let a = "lihai";
let reg = /i+/g;
reg.exec(a)//["i", index: 1, input: "lihai", groups: undefined]
reg.exec(a)//["i", index: 4, input: "lihai", groups: undefined]

match()方法,它并不是正则的方法,属于字符串方法。可在字符串内检索指定的值,

"[]]".match(/\]/g);// ["]", "]"],将匹配的全部放入一个数组中

"[]]".match(/\]/);//["]", index: 1, input: "[]]", groups: undefined] 返回一个类似正则方法exec()返回的数组

正则表达式组成部分

  • 元字符

    /*常用的元字符*/
    
    //1. 量词元字符设置出现的次数
    *		零到多次
    +		一到多次
    {n}		恰好n次
    {n,}	至少n次
    {n,m}	n到m次
    ?		零次或1//2.特殊元字符,单个或者组合在一起代表特殊含义
    \		转义字符 
    .		除\n(换行符)以外的任意字符 
    ^		以哪个字符开关
    &		以哪个字符结束 
    \n		换行符
    \d		0~9之间的一个数字 
    \D0~9之间的数字(大写与小写意思相反)
    \w		数字,字母,下划线中的任意字符 
    \W		非数字,字母,下划线中的任意字符
    \s		一个空白字符(包括空格,制表符,换页符\f)
    \t		一个制表符(一个tab键:四个空格)
    \b		匹配一个单词的边界
    x|y		x或者y中的一个字符 
    [xyz]	x或y或z中的一个字符
    [^xy]	除了x,y以外的任意字符 
    [a-z]	a-z范围内的任意字符   [0-9a-zA-Z_]===\w
    [^a-z]	非a-z范围内的任意字符 
    ()		正则中的分组符号
    (?:)	只匹配不捕获
    (?=)	正向预查 
    (?!)	负向预查 
    
    
    //3.普通元字符 
    /lihai/  只匹配lihai
    
  • 修饰符

    /*常用的修饰符 img */
    i		忽略单词大小写匹配
    m		可以进行多行匹配
    g		全局匹配
    
    // 	/A/.test("lihai")//false
    // 	/A/i.test("lihai")//true
    

解析元字符

^ $

let reg = /^\d/;//以0-9任意一个数字开头
console.log(reg.test("hia"))//false
console.log(reg.test("10hei"))//true
let reg = /\d$/;//以0-9任意一个数字结束 
reg.test("12la20")//true
//	^/$都加表示
let reg = /^\d$/;//以0-9任意一个数字开头,以0-9任意一个数字结束 
reg.test("m")//false
reg.test("0")//true

//验证手机号码,11位
let reg = /^1\d{10}$/;

\转义字符

let reg1 = /^2.3$/;//	. 表示除\n(换行符)以外的任意字符
//\.进行转义表示.
let reg2 = /^2\.3$/;
reg1.test("2.3")//true
reg2.test("2.3")//true
reg1.test("233")//true
reg.test("233")//false
//字符串"\"也要用\进行转义,否则报错

let a = "\d" //d
let a = "\n" // 回车

//匹配字符串\d
let str = "\\d";
let reg = /^\\d$/;// \d表示0-9的数字范围,要用\进行转义

x|y:x或者y

let reg = /^18|23$/;//可能你会认为表示以18或23开头结束 ,但事实并非如此,这里有很乱的优先级。 
//可以表示
//18开头
//20结束
//1开头 8或2 3结束...
//所以一般用()括起来,分组
let reg = /^(18|23)$/;//只能表示以18或23开头结尾

[]

//1.[]中出现的字符一般都代表本身的含义
let reg = /^[@+]+$/;//[]中的+号就是+号本身意思,并不是表示1个或多个了
reg.test("@@")//true;

//如果是:
reg = /^[@+]$/;//要么是@要么是+
reg.test("@@");//false

//特殊情况:\d在[]中还是\d特殊的含义
reg = /^[\d]$/;
reg.test("m")//false
reg.test("2")//true


reg = /^[\\d]$/;// 用\进行转义了
reg.test("\\")//true,在字符串中“\”会报错

//2.[]中不存在多位数
reg = /^[18]$/;
reg.test("1")//true
reg.test("8")//true
reg.test("18")//false

reg= /^[10-29]$/;//1或0-2或9
reg.test("1")//true
reg.test("0")//true
reg.test("9")//true
reg.test("10")//false
原创文章 14 获赞 17 访问量 3781

猜你喜欢

转载自blog.csdn.net/qq_45472813/article/details/106044071