JavaScript正则表达式
2017-12-07 本文已影响37人
_于易
创建
js里创建正则对象有两种方法
- 字面量
/pattren/flags
- 构造函数
new RegExp(pattren [,flags])
- pattern:正则表达式的文本
- 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 | 非单词边界 |