正则表达式 : RegExp (Regular Expression)
前端开发:JS正则表达式
基本数据类型
String
Number
Boolean
undefined
null
复杂数据类型
array
object
function
RegExp(正则)
正则的声明方式 :
var reg1 = new RegExp();
var reg2 = /“男|女”/;
数组 :
var arr = new Array();
var arr = [];
和数组的比较:
两者相似
正则里面的test方法
语法 :
正则对象.test(“需要检测的字符串”)
如这个检测的字符串满足正则对象的要求, 就返回true, 否则返回false
var reg = /张|李/ ;
console.log(reg.test("张三在吃李子")); //true
console.log(reg.test("张三在吃桃子")); //true
console.log(reg.test("李四在吃桃子")); //true
console.log(reg.test("李四在吃李子")); //true
console.log(reg.test("王五在吃桃子")); //false
预定义类 :
就是RegExp 中已经实现给他赋予了特殊含义的字符
- " . " ( [ ^\n\r]) 除了回车和换行以外的任意字符
\r :return 回车
\n:newline 换行
console.log(/./.test("\r")); //false
console.log(/./.test("\n")); //false
console.log(/./.test("\r\n")); //false
console.log(/./.test("\r1")); //true
console.log(/./.test("efdkslgadjkl")); //true
console.log(/./.test("12344\rfeds")); //true
-
\d : [0-9] 数字字符
\D : 非数字字符 -
\s :不可见字符 (包括以下)
\f :匹配换页符
\r :匹配回车符
\n:匹配换行符
\t :匹配制表符 Tab
\v:匹配垂直字符\S :可见字符
-
\w :所有的数字 、字母、 _
\W :非数字 、字母、 _ -
\b:匹配一个单词边界,即字和空格之间的位置
\B:非单词边界匹配
或、和 类:
| 、()
console.log(/zhangsan/.test("zhangzhangsansan")); //true
console.log(/zhangsan/.test("zhangzhang.sansan")); //false
console.log(/zhangsan/.test("zhangzhang.sansan")); //false
console.log(/zhangsan/.test("zhangzhangzhang")); //false
console.log(/zhangsan/.test("zhansanzhang")); //false
console.log(/zhang|san/.test("zhangzhangsansan")); //true
console.log(/zhang|san/.test("zhangzhang.sansan")); //true
console.log(/zhang|san/.test("zhangzhang.sansan")); //true
console.log(/zhang|san/.test("zhangzhangzhang")); //true
console.log(/zhang|san/.test("zhansanzhang")); //true
// zhang zhong san
console.log(/zh(a|o)ng|san/.test("zhangzhangsansan")); //true
console.log(/zh(a|o)ng|san/.test("zhongzhong.sansan")); //true
console.log(/zh(a|o)ng|san/.test("zhangzhang.sansan")); //true
console.log(/zh(a|o)ng|san/.test("zhongzhangzhang")); //true
console.log(/zh(a|o)ng|san/.test("zhansanzhang")); //true
简单类:
[ ]
console.log(/[abc]/.test("a")); //true
console.log(/[abc]/.test("b")); //true
console.log(/[abc]/.test("adsfasdcv")); //true
负向类:
[ ^ ]
console.log(/[^abc]/.test("aaaaabbb")); //false
console.log(/[^abc]/.test("abdcdfsv")); //true
console.log(/[^abc]/.test("abc")); //false
范围类:
[ a-z ] [A-Z] [0-9] [0-9a-zA-Z]
边界 :
^ 匹配行或者字符串的起始位置
console.log(/^\d/.test("12345sdahjfdsljck")); //true
console.log(/^\d/.test("ssss345sdahjfdsljck")); //false
console.log(/^8.ddd/.test("8888879798327fejdksdddddddddddd"));//false
console.log(/^8+ddd/.test("8888879798327fejdksdddddddddddd"));//false
严格匹配
/^ /
以什么开头
/$ /
以什么结尾
console.log(/^abc$/.test("abc")); //true
console.log(/^abc$/.test("abcabcabc")); //false
console.log(/^abc$/.test("aaaabbbccc")); // false
console.log(/^abc$/.test("aaaabbbccc123")); //false
量词
{n}:必须匹配(出现)n次
console.log(/ [/d]{2} /.test("aaaabbbccc123")); //false
{n,} :至少匹配(出现)n次
console.log(/[0-9]{2,}/.test("abbb123232414514")); //true
{n, m} :最少匹配(出现)n次,最多m次
console.log(/[0-9]{2,10}/.test("abbb123232414514")); //true
*:可有可无,多了不限
console.log(/\d*/.test("abbb123232414514")); //true
+:至少匹配(出现)1次 {1,}
console.log(/\d/.test("sadasd213123")); //true
?:最多匹配一次,可有可无
console.log(/\d?/.test("sadasd213123")); //true
其他符号
g:
全局变量
i:
忽略大小写
字符形式的正则表达式需要对特殊字符进行转义
.、 *、+、()、$、/、\、?、[ ]、^、{ }
如何转义:在这些符号前面加上 \ 。
String里面需要使用到的正则表达式的几个方法:
1.replace(参数1,参数2):参数1为正则表达式,参数2为替换的字符串
替换reg匹配字符串
reg.replace(/javascriipt/,"javascript");
2.split():按reg匹配的值拆分成数组。参数是使用的分隔符。
"123,456,789".split(",") //["123","456","789"]
3.match():返回reg匹配结果组成的数组。
"1psad2saser3".match(/\d+/); //["1","2","3"]
4.search():返回reg匹配的第一个字符串位置,没有则返回-1。
"javascript".search(/script/); //4
练习
手机号码:
console.log(/(\+86|0086)|[356789]\d{9}/.test(+86135692547896));
邮箱:
console.log(/\w+@[0-9a-zA-Z]{2,}(.[a-zA-Z0-9]{2,3}){1,2}/.test("263@qq.com"));