js正则表达式整理

613 阅读2分钟

RegExp - 正则表达式(Regular Expression)

作用:

  1. 验证字符串是否符合规则
  2. 从字符串里面获取一部分符合规则的内容

语法:

1. 字面量创建

       var reg = /****/;
        区别:(1) 不能进行字符串拼接
	      (2) 书写基础元字符直接写 \x

2. 内置构造函数创建

        var reg = new RegExp("****");
	区别:(1) 可以进行字符串拼接
	      (2) 书写基础元字符需要写 \\x

方法:

一. test( )  验证字符串是否符合正则,返回一个boolean值
语法:正则.test(字符串)
二. exec( )  从字符串获取符合正则规则的那部分片段, 只捕获第一个片段(返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。)
注意:如果正则是全局模式(标志g),在连续调用test或exec方法时,应注意lastIndex属性的值。
www.w3school.com.cn/jsref/jsref…

exec.png

标识符

标识符是写在正则表达式外面,用来修饰整个正则表达式的

  1.  i 忽略大小写
  2.  g 全局
  3.  y 粘性全局: (不同于g)第一次捕获必须是从 [0]开始,第二次捕获必须是从第一次结束的位置
    语法:
    一.   /abcd/igy
    二.   new RegExp('abcd', 'igy')

元字符

一. 基础元字符

  1. \s 表示一个空格
  2. \S 表示一个非空格
  3. \t 表示一个制表符('tab键')
  4. \d 表示一个数字
  5. \D 表示一个非数字
  6. \w 表示一个"数字,或字母,或下划线"
  7. \W 表示一个非"数字,或字母,或下划线"
  8. 点 . 表示一个非换行符( 除了\n外的任意字符 )
  9. 斜线 \ 表示转义符:把没有意义的内容转义成有意义的内容;把有意义的内容转义成没有意义的内容
    注:字符串里的 / 也表示转义.
  10. \u 匹配中文,后面带上中文的四位 unicode编码
    如:[\u4e00-\u9fa5] 表示任意一个中文字符

二. 边界元字符

  1. ^ 表示字符串开始
  2. $ 表示字符串结尾

三. 限定元字符

用法:写在普通元字符或字母符号的后面,用于修饰前面一个符号的出现次数.

  1. * 表示出现 0 - 多次
  2. + 表示出现 1- 多次
  3. ? 表示出现 0 -1 次
  4. {n} 表示出现 n 次
  5. {n,} 表示出现 n - 多次
  6. {n, m} 表示出现 n - m 次

正则的贪婪性:

贪婪:当正则使用限定符,并且用exec()方法去捕获的时候,默认会尽可能多的去捕获内容.
非贪婪:尽可能少的去捕获内容 ;用法:限定符后面加一个? (常用于抓html结构等...)

四. 特殊字符

1. ( )
1-1. 表示一个整体
1-2. 单独捕获
捕获字符串的时候,从左边开始每一个小括号依次是数组里面[1]开始的内容。

sign_exec1.png

sign_exec.png
2. (?: ) 只表示一个整体,但不单独捕获
3. | 占位或, 表示左边或者右边都行
注意:常与( )连用,因为"占位或"分开的左边和右边是一个整体
4. [ ] 占一个字符的位置,表示里面任意一个都行
5. [^] 占一个字符的位置,表示非里面的的任意一个都行
6. - 表示至 或 到,用在[ ]字符里面,表示从一个字符到另一个字符(ASCII码是连着的),如[0-9], [a-z]
组合形式:
    [0-9a-zA-Z_] 等价于 \w
    [^0-9a-zA-Z_] 等价于 \W
    [0-9] 等价于 \d
    [^0-9] 等价于 \D
    [ ] 等价于 \s
    [^ ] 等价于 \S
特殊说明:当点 .出现在[ ]或者[^]里面的时候,仅表示一个点. 文本,而不是一个非换行字符

五. 预查

  1. (?=) 正向肯定预查
  2. (?!) 正向否定预查
  3. (?<=) 负向肯定预查
  4. (?<!) 负向否定预查

yucha.png

六. 重复出现

/num
num是一个正整数,表示正则第num个可被捕获的( ), 这个可被捕获的( )里是什么,会出现一份一模一样的内容.

与字符串合作方法:

1.  search( ) 查找第一个相匹配的子字符串的索引,如没有则返回-1.
语法:字符串.search(字符串片段);字符串.search(正则表达式)
2.  replace( ) 在字符串中用一些字符替换另一些字符,返回替换后的新字符串。
语法:字符串.replace(字符串片段,要替换的内容);字符串.replace(正则表达式,要替换的内容)
3.  match( ) 在字符串内检索指定的值,返回匹配结果的数组(数组的内容依赖于RegExp 是否具有全局标志 g)。如没有则返回null
语法:字符串.match(字符串片段);字符串.match(正则表达式)

参考链接:www.bilibili.com/video/BV1Ca…

练习

一个邮箱的组成规则是:一串数字、英文、下划线/@/一串英文、数字/./一串英文
xxxx@xxx.com
一串数字、英文、下划线:\w+
@:@
一串英文、数字:[a-z0-9]+
.:\.
一串英文:[a-z]+
reg_email = /^\w+@[a-z0-9]+\.[a-z]+$/i;