标签:下划线 length 一次函数 and ade efi 多少 元字符 put
1 let reg1 = /^\d+$/g;//=>字面量方式 2 let reg2 = new RegExp("^\\d+$", "g");//=>构造函数方式
两个斜杠之间的是"元字符",斜杠后面出现的都是“修饰符”
特殊元字符:
\d 0~9
\w “数字、字母、下划线”中的任意一个
\s 匹配任意一个空白字符(包括\t制表符[TAB键四个空格])
\b 匹配边界符 ‘zhu‘(z左边和u右边就是边界) ‘zhu-feng‘(z左边、u右边、f左边、g右边是边界)
\n 匹配一个换行符
\ 转义字符(把一个普通字符转义为特殊的字符,例如:\d,把有特殊含义的转换为普通意思
. 不仅仅是小数点,代表除了\n以外的任意字符
^ 以某个元字符开头
$ 以某个元字符结尾
[xyz] x或者y或者z中的任意一个
[^xyz] 除了x\y\z以外的任意字符
[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
改变的默认的优先级
分组捕获
分组引用
如果当前正则和字符串不匹配,捕获的结果是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)*/
不加‘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) */
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+)?$/
电话号码
/^1\d{10}$/
中文姓名
/^[\u4E00-\u9FA5]{2,}(·[\u4E00-\u9FA5]{2,})?$/
邮箱
/^\w+([-.]\w+)*@[A-Za-z0-9]+([-.][A-Za-z0-9]+)*(\.[A-Za-z0-9]+)$/
标签:下划线 length 一次函数 and ade efi 多少 元字符 put
原文地址:https://www.cnblogs.com/wangshouren/p/11615651.html