正则表达式技术详解 Regular Expression

  • Post author:
  • Post category:其他


一、正则表达式的用途:

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 可选项 匹配选项



版权声明:本文为weixin_31765427原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。