正则表达式技术详解 Regular Expression

一、正则表达式的用途:
1、两种用法

  • regexp.xxx(string)
  • string.yyy(regexp)

2、常用到在一段文本中搜索、匹配、替换指定形式的文本
eg:词语出现频率统计、验证邮箱等
二、语法
1、定义正则表达式对象用Perl风格的直接量语法
/pattern/attribute

  • 不加引号
  • / 不能省略
  • pattern –>表达式内容
  • attribute –> i,g,m

2、表达式内容可以包含以下几类:

  • 字符类:用于匹配普通字符
    • 所有的单个大小写字母、数字都是一个正则表达式
    • 正则表达式中的特殊语法含义的元字符,用\转义
      • . \ / * ? + [ ( ) ]{ } ^ $ |
  • 量词元字符:指定字符出现的次数
字符含义
n?匹配n出现0次或1次
n*匹配n出现0次或多次
n+匹配n出现1次或多次
n{x}匹配n出现x次
n{x,y}匹配n出现x次到y次
n{x,}匹配n出现>=x次
  1. 范围选择
字符含义
[abc]匹配指定集合内的任意一个字符
[^abc]匹配不在指定集合内的任意一个字符
[0-9]匹配任意一个数字
[a-z]匹配任意一个小写字母
A-Z]匹配任意一个大写字母
[A-z]匹配大A到小z的所有字符
exp1 | exp2匹配exp1或exp2
  1. 特殊匹配符
字符含义
\d匹配一个数字
\D匹配一个非数字
\w匹配一个数字、字母、下划线
\W匹配一个非数字、字母、下划线
\s匹配一个空白符
\S匹配一个非空白符
.匹配除了回车和换行之外的任意单字符
  1. 指定匹配位置
字符含义
^匹配字符串开头
$匹配字符串结尾
\b匹配单词的边界
\B匹配单词的非边界
? = x匹配其后紧接x的字符串
? != x匹配其后没有紧接x的字符串
  1. 指定修饰符
字符含义
i忽略大小写
g全局匹配
m多行匹配

三、创建正则表达式对象的两种用法

1.直接量表示法 (perl写法)

var reg = /式子/igm;

2.对象创建法(JS写法)

var reg = new RegExp("式子","igm");

在JS中,\是转义的意思,因此

var reg = new RegExp("abs\d","i"); //false

正确写法:

var reg = new RegExp("abs\\d","i"); //false

四、RegExp对象属性

  1. global 判断是否为全局匹配
  2. ignoreCase 判断是否忽略大小写
  3. multiline 判断是否支持多行匹配
  4. source 返回模式匹配所使用的文本(原式子) 《只读》
var str = "abcdefg";
var reg = /cd/gm;
console.log(reg.global); //true
console.log(reg.ignoreCase); //false
console.log(reg.multiline);  //true
console.log(reg.source); //cd

5、RegExp.$n(n取值:1-99): 指代最近一次成功匹配第N个分组的内容,也就是与正则表达式匹配的第n个 子匹配(以括号为标志)字符串

var r= /^(\d{4})-(\d{1,2})-(\d{1,2})$/; //正则表达式 匹配出生日期(简单匹配)     

r.exec('1985-10-15');

s1=RegExp.$1;

s2=RegExp.$2;

s3=RegExp.$3;

console.log(s1+" "+s2+" "+s3)//结果为1985 10 15

-注意:$n是RegExp的属性

var reg =/ /i;
reg.$1;   //错误语法

6、lastIndex 指定下次从哪开始匹配

lastIndex必须和g连用

  • 该属性存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。
  • 上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。
  • 该属性是可读可写的。只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。
var str = "The rain in Spain stays mainly in the plain";
var patt1 = new RegExp("ain", "g");

patt1.test(str)
console.log("Match found. index now at: " + patt1.lastIndex);  //8

五、RegExp常用方法

  1. test()
    ①检索字符串指定的值
    ②会影响lastIndex
    ③返回true false
var str = "abcdefg";
var reg = /cd/gm;
console.log(reg.test(str));  //true
console.log(reg.lastIndex);  //4 <下次从4开始查找>
  1. exec()
    ①会影响lastIndex
    ②返回找到的索引内容和input【关联数组】 / null
var str = "abcdefg";
var reg = /cd/gm;
console.log(reg.exec(str));  //[ 'cd', index: 2, input: 'abcdefg' ]
console.log(reg.lastIndex);  //4 <下次从4开始查找>
  1. compile() :

    ① 该方法可以编译指定的正则表达式,编译之后的正则表达式执行速度将会提高,如果正则表达式多次被调用,那么调用compile方法可以有效的提高代码的执行速度,如果该正则表达式只能被使用一次,则不会有明显的效果

② 基本语法:objReg.compile(pattern[,flag])
objReg必选项,RegExp对象变量的名称
pattern 必选项 正则表达式
flag 可选项 匹配选项

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值