正则表达式
正则表达式也是一个对象,用于定义一些字符串的规则。计算机可根据正则表达式来检查一个字符串是否符合规则,从而可以对字符串进行一些操作。
一、创建RegExp对象
创建一个正则表达式对象:
语法: var 变量名=new RegExp("正则表达式","匹配模式")
也可以使用字面量来创建正则表达式
语法: var 变量名=/正则表达式/匹配模式
二、规则
-
匹配模式
匹配模式可写可不写,它的值可以是i或者g,i表示忽略大小写,g表示进入全局匹配模式。这两个值也可以都写上,且不论顺序,中间也没有标点符号
-
正则表达式
| 表示或的意思
[ ] 括号中的内容也表示或的意思,例如[abc]就表示 a或b或c
[a-z] 表示任意小写字母
[A-Z] 表示任意大写字母
[A-z] 表示任意字母
[^xx] 表示除xx以外
[0-9] 表示任意数字
^a 表示以a开头
a
则表示a既是开头也是结尾
以下都是 /内容{次数要求}/ 的格式
a{n} 表示内容a正好出现n次
a{x,y} 表示内容a出现了x~y次
a{n,} 表示内容a出现了n次以上
a{n+} 表示内容a至少出现了n次,等于{n,}
a{n*} 表示内容a出现了0次或多次,等于{0,}
a{n?} 表示内容a出现了0次或1次,等于{0,1}
例子:手机号规则 /^1[3-9][0-9]{9}$/
-
一些特殊的字符
- "." 可用来表示任意字符
- "\" 在正则表达式中,\为转义字符,可以将某些特殊的字符()表示出来。例如\.可用来表示.
- \w 表示任意字母、数字或下划线
- \W 表示除了字母、数字或下划线
- \d 表示任意数字
- \D 表示除了数字
- \s 表示空格
- \S 表示除了空格
- \b 表示单词边界,即表示单词是独立的
- \D 表示除了单词边界
一些用法:
去除开头的空格 字符串.replace(/^\s*/,"")
去除结尾的空格 字符串.replace(/^\s$/,"")
去除开头和结尾的空格 字符串.replace(/^\s*|^\s$/g,"")
三、方法
正则表达式是一个对象,这个对象中常见的有三个方法:compile(), exec(), test(); 其中complile用的不多,test()它是用来验证, exec()是用来匹配的。
test的用法:
正则表达式.test(字符串); 如果验证成功就返回true, 否则返回false。
let p = /^a/i;
let arr = "Acs2defga";
console.log(p.test(arr)) //true
exec的用法:
在目标字符串中找出符合正则表达式规则的子串。
-
exec()格式: 返回值 = 正则表达式.exec(目标字符串);
-
返回值: 如果找到,返回数组;如果找不到,返回null
let p = /a/ig; let arr = "这里A没ssa有a"; console.log(p.exec(arr)) // [ 'A', index: 2, input: '这里A没ssa有a', groups: undefined ]如果按照上面的写法,只会找到第一个。要找到所有,使用 模式修正符g 全局匹配!
如果目标字符串中有多个符号要求的子串,我们需要写多份结果
let p = /a/ig;
let arr = "这里A没ssa有a";
console.log(p.exec(arr)) // [ 'A', index: 2, input: '这里A没ssa有a', groups: undefined ]
console.log(p.exec(arr)) // [ 'a', index: 6, input: '这里A没ssa有a', groups: undefined ]
console.log(p.exec(arr)) // [ 'a', index: 8, input: '这里A没ssa有a', groups: undefined ]
console.log(p.exec(arr)) // null
四、应用
学习string时,有些方法可以配合正则使用。 replace()方法就是string中的一个方法,**replace**这个方法的作用:替换。
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
stringObject.replace(regexp/substr,replacement)
示例:
let arr = " 天气预报 ";
console.log(arr) // 天气预报
let res = arr.replace(/^\s|\s$/g,"换一下")
console.log(res) // 换一下天气预报换一下