n+
{1,正无穷}
\w 0-9A-z_
var reg = /\w+/g;
var str = 'abcdefg';
正则匹配的两个原则
1.不会回头 匹配成功的就不会在匹配
2.贪婪模式 能匹配多就不会匹配少
n*
{0,正无穷}
\w 0-9A-z_
var reg = /\w*/g;
var str = 'abcdefg';
\d 0-9
var reg = /\d*/g;
var str = 'abcdefg';
## n?
{0,1}
var reg = /\w?/g;
var str = 'abcdefg';
{x,y}
注意 这里2前面有一个空格 所以匹配不到
var reg = /\w{1, 2}/g;
var str = 'abcdefg';
var reg = /\w{1,2}/g;
var str = 'abcdefg';
{1,正无穷} === n+
{0,正无穷} === n*
{0,1} === n?
var reg = /\w{5,}/g;
var str = 'abcdefg';
^n
匹配任何以n开头的字符串
var reg = /^ab/g;
var str = 'abcdabcd';
n$
匹配任何以n结尾的字符串
var reg = /cd$/g;
var str = 'abcdabcd';
检查字符串是否abcd开头以abcd结尾
这样是找不到的
这样是匹配以abcd开头并且以这个abcd结尾 只能找到字符串abcd
var reg = /^abcd$/g;
var str = 'abcd123123abcd';
所以要这样写
var reg = /^abcd[\s\S]*abcd$/g;
var str = 'abcd123123abcd';
或者
var reg = /^abcd.*abcd$/g;
var str = 'abcd123123abcd';
满足以abcd开头或以abcd结尾的字符串
var reg = /^abcd|abcd$/g;
var str = 'abcd123123abcd';
检查字符串是否以abcd开头和以abcd结尾 并且开头结尾之间是数字
var reg = /^abcd\d+abcd$/g;
var str = 'abcd123123abcd';
匹配以138开头的手机号
var reg = /^138\d{8}$/g;
var str = '13812345678';
?=n
匹配任何其后紧接着指定字符串n的字符串
这样是不行的
var reg = /a?=b/g;
var str = 'abcdabcd';
要有括号
var reg = /a(?=b)/g;
var str = 'abcdabcd';
?!n
匹配任何其后没有紧跟着n的字符串
var reg = /a(?!b)/g;
var str = 'abcdascd';
子表达式 反向引用
可以用来获取到xxxx xxyy
括号括起来的是子表达式 \n表示反向引用第几个子表达式
例如\1表示引用第一个子表达式\2引用第二个子表达式
var reg = /(a)\1\1\1/g;
var str = 'bbaaaaccaaaaiddddbaaaa';
子表达式有记忆功能
反向引用第一个子表达式匹配到的字符串三次
var reg = /(\w)\1\1\1/g;
var str = 'bbaaaaccaaaaiddddbaaaa';
匹配xxyy
var reg = /(\w)\1(\w)\2/g;
var str = 'aabbccddddddcccevv';
正则对象属性
global是否加上了全局匹配g
ignoreCase是否加上了忽略大小写i
multiline是否加上了匹配换行m
source返回匹配规则本身
test
reg.test(str) 是否匹配成功 返回布尔值
exec
reg.exec()
类数组 继承Array.prototype
所以类数组不一定都继承Object.prototype
只有自己写的类数组一定继承Object.prototype
var reg = /123/g;
var str = '123123123123123';
他是循环匹配的
会返回匹配的子表达式
var reg = /(\w)\1(\w)\2/g;
var str = 'aabbccddddddccceevvv';
lastIndex
lastIndex和exec中的index是吻合的
可以通过lastIndex 去调整exec的index
当把lastIndex改为不是正好匹配的值的时候 exec的index会找到从这个值开始的下一个匹配的下标
当再次执行时lastIndex会修改回来