天天看点

JavaScript中正则表达式

创建正则表达式对象有三种方式:字面量方法、构造函数、工厂函数(不常用)。

下面介绍字面量和构造函数方式创建正则表达式对象。、

字面量:

//   /pattern/flags
pattern1 = /\w/i;
pattern2 = /\d{2,}/;

// 以字面量创建的正则表达式对象不需要加引号。
           

构造函数:

//  new RegExp(patternString [,flags])

pattern1 = new RegExp('\d{2}','i');
pattern2 = new RegExp('\w','g');
pattern3 = new RegExp('www\d','gi');
// 或者
pattern4 = new RegExp(/\d{2}/,'i');
           
note:需要注意的是下面这种既有斜杠/又有引号的是错误的。
pattern3 = new RegExp('/\d{2}/','i')
           

难点特殊符号的含义:

. 匹配任意单个字符,但是行结束符号除外:\n \r
\w 匹配字母数字下划线。
\W 匹配除去字母数字下划线之外的字符
\s 匹配一个空白字符。包括空格( )、制表符(\t)、换页符(\f)、换行符(\r \n)
[asd] 匹配集合中任意一个字符。
[^asd] 匹配任意不在括号中的字符。
(x) 分组括号,匹配x并且捕获匹配项。
\1,\2,\n 反向引用
(?:x) 匹配x但是不会捕获
x(?=y) 仅匹配被y跟随的x
x(?!y) 仅匹配不被y跟随的x
(?<=y)x

x

只有在

y

后面才匹配
(?<!y)x

x

只有不在

y

后面才匹配
x|y 匹配x或者y

分组知识

正则表达式中分组分为一下几种:

  • 捕获型分组
  • 非捕获型分组
  • 前瞻型分组
  • 后瞻型分组

捕获型分组 ( )

捕获型分组知识主要包含:引用与嵌套分组

被正则表达式匹配到的字符串会被暂存起来。其中分组捕获的串会从1开始编号,我们可以引用这些捕获项。

var reg = /(\d{4})-(\d{2})-(\d{2})/

var date = '2011-05-12'

reg.test(date)

 
RegExp.$1 // 2011

RegExp.$2 // 05

RegExp.$3 // 12
           
捕获型分组常常和replace配合。
var reg = /(\d{2}).(\d{2})\/(\d{4})/

var date = '12.21/2012'
 

date = date.replace(reg, '$3-$1-$2') // date = 2012-12-21
           
非捕获型分组(?:)
前瞻型分组(?=)  (?!)

继续阅读