JavaScript正则
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript正则相关的知识,希望对你有一定的参考价值。
创建正则
1 let reg1 = /^d+$/g;//=>字面量方式 2 let reg2 = new RegExp("^\d+$", "g");//=>构造函数方式
两个斜杠之间的是"元字符",斜杠后面出现的都是“修饰符”
特殊元字符:
-
d 0~9
-
w “数字、字母、下划线”中的任意一个
-
s 匹配任意一个空白字符(包括 制表符[TAB键四个空格])
-
匹配边界符 ‘zhu‘(z左边和u右边就是边界) ‘zhu-feng‘(z左边、u右边、f左边、g右边是边界)
-
匹配一个换行符
-
转义字符(把一个普通字符转义为特殊的字符,例如:d,把有特殊含义的转换为普通意思
-
. 不仅仅是小数点,代表除了 以外的任意字符
-
^ 以某个元字符开头
-
$ 以某个元字符结尾
-
[xyz] x或者y或者z中的任意一个
-
[^xyz] 除了xyz以外的任意字符
-
[a-z] 获取a-z中的任意一个字符([0-9] 等价于d ...)
-
() 正则分组
-
(?:) 当前分组只匹配不捕获
-
(?=) 正向预查
-
(?!) 负向预查
量词元字符(让其左边元字符出现多次)
-
‘*‘ >=0
-
‘?‘ [0,1]
-
‘+‘ >=1
-
{n} n次
-
{n.} >=n次
-
{n,m} [n,m]
普通元字符
-
只要在正则中出现的元字符(在基于字面方式创建),除了特殊和有量词意义的以外,其余的都是普通元字符
中括号的一些细节
-
中括号中出现的元字符一般都是代表本身含义的
-
中括号中出现的两位数,不是两位数,而是两个数字中的任意一个
let reg = /^[12-65]$/;//这个正则的意思是 1或者2~6或者5
分组的作用
-
改变的默认的优先级
-
分组捕获
-
分组引用
正则捕获exec
-
如果当前正则和字符串不匹配,捕获的结果是NULL
-
如果匹配,捕获的结果是一个数组
-
0:大正则捕获的内容,后面的数字索引是匹配到的分组内容
-
index:正则捕获的起始索引
-
input:原始操作的字符串
-
EXEC只能捕获到第一个和正则匹配的内容(正则捕获的懒惰性,解决正则捕获的懒惰性,我们需要加全局修饰符G)
let reg=/(d+)abc/g; console.log(reg.exec(‘12abc23abc34‘)); console.log(reg.exec(‘12abc23abc34‘)); /* ["12abc", "12", index: 0, input: "12abc23abc34", groups: undefined] 0: "12abc" 1: "12" groups: undefined index: 0 input: "12abc23abc34" length: 2 __proto__: Array(0) -------------------------------------------------------------------------- ["23abc", "23", index: 5, input: "12abc23abc34", groups: undefined] 0: "23abc" 1: "23" groups: undefined index: 5 input: "12abc23abc34" length: 2 __proto__: Array(0)*/
字符串匹配正则match
不加‘g‘:
let reg=/d+/; let str=‘12abc23abc34‘; console.log(str.match(reg)); /*和正则捕获exec的结果一样 ["12", index: 0, input: "12abc23abc34", groups: undefined] 0: "12" groups: undefined index: 0 input: "12abc23abc34" length: 1 __proto__: Array(0) */
加‘g‘:
let reg=/d+/g; let str=‘12abc23abc34‘; console.log(str.match(reg)); /* (3) ["12", "23", "34"] 0: "12" 1: "23" 2: "34" length: 3 __proto__: Array(0) */
replace
-
reg和 str匹配多少次,函数就被触发执行对少次,基于exec把每一次正则匹配到结果中的每一项,传递给函数执行
-
每一次函数中返回的是啥,就把当前大正则匹配的内容替换成啥
let reg=/(d+)abc/g; let str=‘12abc23abc34‘; str=str.replace(reg,(...arg)=>{ console.log(arg);/*匹配到两次 ["12abc", "12", 0, "12abc23abc34"] ["23abc", "23", 5, "12abc23abc34"] */ return ‘haha‘; }); console.log(str);//hahahaha34
正则捕获贪婪性
正则捕获还具备贪婪性:每一次匹配捕获的时候,总是捕获到和正则匹配中最长的内容,把问号放到量词元字符后面,代表的就不是出现零次或者一次了,而且取消捕获的贪婪性
一些常用正则
-
有效数字
/^[+-]?(d|([1-9]d+))(.d+)?$/
-
电话号码
/^1d{10}$/
-
中文姓名
/^[u4E00-u9FA5]{2,}(·[u4E00-u9FA5]{2,})?$/
-
邮箱
/^w+([-.]w+)*@[A-Za-z0-9]+([-.][A-Za-z0-9]+)*(.[A-Za-z0-9]+)$/
以上是关于JavaScript正则的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript之基础-10 JavaScript 正则表达式(概述定义正则RegExp对象用于模式匹配的String方法)