正则表达式
正则表达式用于定义一些字符串的规则,计算机可以根据正则表达式,来检查一个字符串是否符合规则,或者将字符串中符合规则的内容提取出来。通常被用来检索、替换那些符合某个模式(规则)的文本。在表单中,用于校验数据;在爬虫中,用于数据采集。正则表达式是一个对象。使用typeof检查正则对象,会返回object
编写正则:
(1)对象模式使用
创建正则表达式的对象语法: 【var 变量 = new RegExp("正则表达式","匹配模式");】
test() 方法用于检测一个字符串是否匹配某个模式。如果字符串中有匹配的值返回 true ,否则返回 false。
var reg = new RegExp("1");
var str = 'abc1';
var result = reg.test(str);
console.log(reg,result);
在构造函数中可以传递一个匹配模式作为第二个参数,可以是 i (忽略大小写) ;g (全局匹配模式)
(2)字面量模式使用
使用字面量来创建正则表达式会更加简单一些。
创建正则表达式的对象语法【var 变量 = /正则表达式/匹配模式;】
或称之为:/原子和元字符/模式修正符 , 定界符:/.../
除了字母、数字和反斜线\以外的任何字符都可以为定界符号,比如 | |、//、{}、!!等等,但是需要注意,如果没有特殊需要,我们都使用正斜线//作为正则表达式的定界符号。 正则表达式的原子和元字符都放在定界符之间,而模式修正符放在定界符之外。
转义:
" \ "转义字符可以将有意义的字符转成没意义的字符,还可以将没意义的字符转为有意义的字符。如:\d表示任意一个十进制的数字。
代表范围的原子 | 说明 | 自定义原子表示法 |
\d | 表示任意一个十进制的数字 | [0-9] |
\D | 表示任意一个除数字之外的字符 | [^0-9] |
\s | 表示任意一个空白字符,空格、\n\r\t\f | [\n\r\t\f ] |
\S | 表示任意一个非空白 | [^\n\r\t\f ] |
\w | 表示任意一个字 a-zA-Z0-9_ | [a-zA-Z0-9_] |
\W | 表示任意一个非字,除了a-zA-Z0-9_以外的任意一个字符 | [^a-zA-Z0-9_] |
--------------------------------------------------------------------------------
元字符
1.或
/a[abc]s/ 可匹配aas 或 abs 或 acs
2.范围
[a-z]
[0-9] \d
[a-z0-9]
3.排除
[^abc]----排除abc
[^0-9]---排除0-9数字
--------------------------------------------------------------------------------
量词
如果不加量词,就是一个
{n}-----n个
{n,m}-----最少n个,最多m个
{n,}--------最少n个,最多不限
{0,m}-----最少0个,最多m个
+ -----最少1个,最多不限,相当于 {1,}
* -----最少0个,最多不限,相当于{0,}
? ------最少0个,最多1个,相当于 {0,1}
https?://--------s可有可无
--------------------------------------------------------------------------------
谓语(修饰符)
^ 行首
$ 行尾
--------------------------------------------------------------------------------
匹配模式:
i Ignore 忽略大小写
g Global 全局匹配
m multi-line 多行模式
单行模式(默认) ^$指的是整个字符串的开头和结尾;不会识别字符串里面的换行
多行模式(m) ^$指的是每一行的开头和结尾;识别字符串中的\n
let re=/^/m;
search 类似于indexOf,是位置----str.search(re)
match 匹配——结果数组----str.match(re)
replace 替换----str.replace(re)
re.test(str) => bool
--------------------------------------------------------------------------------
举例:
手机号
1.11位数字
2.13x/150/158/170/172开头
或 |
/^(13\d|15[08]|17[0-4])\d{8}$/
--------------------------------------------------------------------------------
邮箱
aaa @ aaa.com
1.用户名:数字、字母、下划线,最多64位
\w等价于[a-z0-9_]
\w{1,64}
2.网址:英文、数字、中划线
[a-z0-9\-]{1,256}
3.后缀:(.英文2~6位) 1~2个
(\.[a-z]{2,6}){1,2}
/^\w{1,64}@[a-z0-9\-]{1,256}(\.[a-z]{2,6}){1,2}$/i
--------------------------------------------------------------------------------
用户名
(数字、字母、下划线)8~32位
/^\w{8,32}$/
--------------------------------------------------------------------------------
身份证验证
15位或者18位身份证
d{18}|d{15}
--------------------------------------------------------------------------------
非法字符验证
非法字符如:< > & / ' |
[^<>&/|'\]+
--------------------------------------------------------------------------------
日期验证
匹配形式如:20030718,030718
范围:1900--2099
正则表达式((((19){1}|(20){1})d{2})|d{2})[01]{1}d{1}[0-3]{1}d{1}
--------------------------------------------------------------------------------
匹配中文字符
[\u4e00-\u9fa5]