1、元字符 [拥有特殊含义的元字符] \d -> 匹配一个0-9的数字,相当于[0-9],和它相反的是\D ->匹配一个除了0-9的任意字符 \w -> 匹配一个0-9、a-z、A-Z、_的数字或字符,相当于[0-9a-zA-Z_] \s -> 匹配一个空白字符(空格、制表符...) \b -> 匹配一个单词的边界 \t -> 匹配一个制表符 \n -> 匹配一个换行 . -> 匹配一个除了\n以外的任意字符 ^ -> 以某一个元字符开头 $ -> 以某一个元字符结尾 \ -> 转移字符 x|y -> x或者y的一个 [xyz] -> x、y、z中的任意一个 [^xyz] -> 除了xyz中的任意一个字符 [a-z] -> 匹配a-z中的任意一个字符 [^a-z] -> 匹配除了a-z中的任意一个字符 () -> 正则中的分组 注意: 1)关于[] a、[+] ->中括号中出现的所有字符都代表的是本身的意思 b、[12-65] ->这个不是12-65而是1/2-6/5三者中的一个 2)关于() a、分组的作用是改变默认的优先级,例如:/^18|19$/,181、189、119、819、1819...都符合,而不是我们认为的18或19,但是改成/^(18|19)$/就是单纯的18或19了 b、可以在捕获大正则匹配的内容同时,把分组匹配的内容也进行捕获->分组捕获 c、分组引用,例如:/^(\d)(\w)\2\1$/,这里的\2是和第二个分组出现一模样的内容,\1是和第一个分组出现一模一样的内容,例如:"0aa0"就符合了 [代表数量的量词元字符] * -> 0到多个 + -> 1到多个 ? -> 0到1个 {n} -> 出现n次 {n,} -> 出现n到多次 {n,m} -> 出现n到m次 注意: 1)关于?的几种情况 a、放在非量词元字符后面,代表出现0-1次 b、放在量词元字符后面,代表取消捕获时候的贪婪性,例如:reg=/\d+/; reg.exec("2015") -> "2015" 但是如果正则这样写 reg=/\d+?/; reg.exec("2015") -> "2" c、在分组开头加?:,代表当前的分组只是匹配不进行捕获,例如:/^(?:\d+)$/ d、在分组开头加?=,正向预查,例如:/^abcdef(?=1|2)$/ 只有"abcdef1"和"abcdef2"才符合 e、在分组开头加?!,负向预查,例如:/^abcdef(?!1|2)$/ 除了"abcdef1"和"abcdef2"不符合,其他的只要是"abcdef(任何的东西)"都符合 [代表本身意思的元字符] 除了以上的,在字面量方式中,我们出现的其他任意字符代表的都是自己本身的意思 var num=12; var reg=/^\w"+num+"$/; ->这里"+num+"不是把变量的值拼接,而这里的不管是"还是+都是元字符 ->对于需要拼接字符串和变量的方式我们只能使用实例方式创建正则 2、修饰符 i -> ignoreCase 忽略字母的大小写 g -> global 全局匹配 (加上g可以解决正则捕获时候的懒惰性) m -> multiline 多行匹配 3、项目中常用的正则 1)有效数字的 var reg=/^[+-]?(\d|([1-9]\d+))(\.\d+)?$/; 2)邮箱的 var reg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/; 3)电话的 var reg = /^1\d{10}$/; 4)年龄在18-65之间的 var reg = /^((18|19)|([2-5]\d)|(6[0-5]))$/; 5)中文姓名 var reg = /^[\u4e00-\u9fa5]{2,4}$/; 6)身份证 var reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(?:\d|X)$/; //-> 12828(省市县) 1990(年) 12(月) 04(日) 06 1(奇数是男偶数是女) 7(数字或者X) 4、正则的匹配 reg.test([string]) ->true就是匹配成功 false->匹配不成功 5、正则的捕获 1)reg.exec([string]) -> 首先去匹配,匹配成功在捕获,返回的是一个数组; 如果匹配不成功返回的是null; -> 正则的捕获即懒惰又贪婪 -> 解决懒惰性 在正则的末尾增加全局修饰符g -> 解决贪婪性 在量词后面加? 后续还有*********************************************
时间: 2024-10-29 00:47:27