让前端飞Web前端之路程序员

JavaScript正则表达式

2017-12-07  本文已影响37人  _于易

创建

js里创建正则对象有两种方法

  1. 字面量/pattren/flags
  2. 构造函数 new RegExp(pattren [,flags])
g:全局匹配
i:忽略大小写
m:多行匹配
u:Unicode; 将模式视为Unicode序列点的序列
y:粘性匹配; 仅匹配目标字符串中此正则表达式的lastIndex属性指示的索引(并且不尝试从任何后续的索引匹配)。

元字符

在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符。

( [ { \ ^ $ | ) ? * + .

字符类

一般情况下正则表达式一个字符(转义字符算一个)对应字符串一个字符,但我们可以使用元字符[]来构建一个简单的类, 比如[abcd]代表一个字符,这个字符可以是abcd四个字符中的任意一个。

取反

元字符[]组合可以创建一个类,我们还可以使用元字符^创建反向类/负向类,反向类的意思是不属于XXX类的内容,表达式[^abc]表示一个不是字符a或b或c的字符。

范围类

按照上面的说明如果希望匹配单个数字那么表达式是这样的

  //匹配一个字符,这个字符可以是0-9中的任意一个
    var reg1 = /[0123456789]/

  //匹配一个字符,这个字符可以是0-9中的任意一个
    var reg2 = /[0-9]/

  //匹配一个字符,这个字符可以是a-z中的任意一个
    var reg3 = /[a-z]/

  //匹配一个字符,这个字符可以是大写字母、小写字母、数字中的任意一个
    var reg3 = /[a-zA-Z0-9]/

预定义类

字符 等价类 含义
. [^\r\n] 除了回车符和换行符之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白符
\S [^\t\n\x0B\f\r] 非空白符
\w [a-zA-Z_0-9] 单词字符,字母、数字下划线
\W [^a-zA-Z_0-9] 非单词字符

有了这些预定义类,写一些正则就很方便了,比如我们希望匹配一个可以是 ab+数字+任意字符 的字符串,就可以这样写了 /ab\d./

分组

有时候我们希望使用量词的时候匹配多个字符,而不是像上面例子只是匹配一个,比如希望匹配Byron出现20次的字符串,我们如果写成 Byron{10}的话匹配的是hunge+r出现10次。
怎么把Byron作为一个整体呢?使用()就可以达到此目的,我们称为分组:

    /(Byron){10}/

或用|来表示

var reg1 = /hello|world/ 
//等同于
var reg2 = /(hello)|(world)/

量词

如果我们希望匹配一个连续出现20次数字的字符串我们不需要写成这样:
\d\d\d\d...
为此正则表达式引入了一些量词

字符 含义
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次

边界

正则表达式还提供了几个常用的边界匹配字符

字符 含义
^ 以xxx开头
$ 以xxx结尾
\b 单词边界 指[a-zA-Z_0-9]之外的字符
\B 非单词边界

司徒正美 javascript正则表达式

上一篇下一篇

猜你喜欢

热点阅读