首页

JavaScript正则表达式

 

1.什么是正则表达式

  • 按照语法规则去匹配符合条件的的字符串

 

2.RegExp对象

 实例化RegExp对象:

  • 1).字面量  例:var reg = /\bis\b/g;
  • 2).构造函数 例:var reg = new RegExp('\\bis\\b','g'); \\为转义表示

 

3.标识符

  • i:忽略大小写
  • g:全局搜索
  • m:多行搜索

 

4.元字符

  • 字符分为两类:原本含义字符和元字符
  • 在正则表达式中 ^$(){}[].都不代表原义

 

5.字符类

  • 1).一般情况下正则表达式中一个字符对应字符串中的一个字符

   []可用于创建一个类,所谓类是一个泛指,不是特指某个字符,可以连写 例[a-zA-Z]

  • 2).字符类取反:不属于字符类的内容 例[^abc] 不属于a或b或c的字符内容
  • 3).范围类:[a-z] 属于a-z这一字符范围内的

***特殊例:var t = 2016-09-10 用 t.replace( /[0-9]/g,'x')结果为xxxx-xx-xx

若使用t.replace(/[0-9-]/g,'x')结果为xxxxxxxxxx

  • 4).预定义类:

.除了回车换行之外所有字符

\d数字字符

\D非数字字符

\s空白字符

\S非空白字符

\w单词字符

\W非单词字符

  • 5).边界字符

^以xxx开始

$以xxx结束

\b单词边界

\B非单词边界

 

6.量词

  • ?:最多一次
  • +:至少一次
  • *:任意次
  • {n}:出现n次
  • {n,m}:出现n到m次
  • {n,}至少出现n次

 

7.贪婪与非贪婪模式

  • 贪婪模式:尽量多的匹配

例: '12345678'.replace(/\d{3,6}/g,'x')

x78

  • 非贪婪模式:尽量少的匹配,在量词后加上?即可进入非贪婪模式

例: '12345678'.replace(/\d{3,6}?/g,'x')

xx78

 

8.分组

  • 分组:使用 () 可以达到分组的功能,使量词作用于分组
  • 或:使用 | 可以达到或的效果
  • 反向引用:使用$1$2$3来捕获分组内的内容

例:

'2015-12-01'.replace(/(\d{4})-(\d{2})-(\d{2})/,'$2/$3/$1')
"12/01/2015"

  • 忽略分组:不希望捕获某些分组,在分组内加上?:就可以

例:

'2015-12-01'.replace(/(?:\d{4})-(\d{2})-(\d{2})/,'$2/$3/$1')
"01/$3/12"

 

9.前瞻

  • 正则表达式从文本头部向尾部开始解析,文本尾部方向,称为前
  • 前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/后瞻方向相反
  • javascript不支持后顾
  • 符合和不符合断言称为肯定/正向匹配和否定/负向匹配
  • 前瞻reg(?=assert)

'x2d.0s0d2iou'.replace(/\w(?=\d)/g,'Q')
"Q2d.0Q0Q2iou"

  • 后瞻reg(!?assert)

'a2*34vv'.replace(/\w(?!\d)/g,'x')
"ax*3xxx"

 

10.对象属性

  • global 是否全文搜索 默认false
  • ignore case 是否大小写敏感 默认false
  • multiline 多行搜索 默认false
  • lastindex 是当前表达式匹配内容的最后一个字符的下一个位置
  • source 正则表达式的文本字符串

 

11.test和exec方法

  • test 用于测试字符串参数中是否存在匹配正则表达式模式的字符串 匹配返回true 不匹配返回false 
  • exec 使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果 若没有匹配结果则返回null 有匹配结果返回数组(数组中有index(声明匹配文本的第一个字符的位置),input(存放被检索的字符串string))

推荐一个正则表达式可视化网站 http://regexper.com

posted @ 2016-08-16 13:41  Sturrbon  阅读(204)  评论(0编辑  收藏  举报