JavaScript 正则表达式基本语法

152 阅读6分钟

目录

1、字符描述

2、字符范围

3、选择操作

4、重复类量词

5、边界量词

6、声明量词

7、表达式分组

8、子表达式引用


正则表达式(Regular Expression)是一个描述字符模式的对象,字符模式就是由一系列字符构成的特殊格式的字符串,它由普通字符(A~Z、a~z、0~9)和元字符组成。正则表达式的语法主要就是对各种字符的功能进行描述。

1、字符描述

根据正则表达式的语法规则,大部分字符仅能够描述自身,这些字符被称为普通字符,如所有的字母、数字等。

元字符 就是拥有特殊意义的字符,一般需要加反斜杠进行表示,以便对原字符进行转义,避免与字符本身的予以发生冲突。

元字符描述元字符描述
.查找单个字符,处理换行和行结束符  
\w查找单词字符\W查找单词字符
\d查找数字\D查找非数字字符
\s查找空白字符\S查找非空白字符
\b匹配单词边界\B匹配非单词边界
\0查找NUL字符\n查找换行符号
\f查找换页符\r查找回车符
\t查找制表符\v查找垂直制表符
\xxx查找以八进制数xxx规定的字符\xdd查找以十六进制数dd规定的字符
\uxxx查找以十六进制数xxx规定的Unicode字符  

2、字符范围

在正则表达式中方括号用来查找特定范围内的字符,在方括号内仅指定起止字符,然后中间部分通过连字符(-)表示。如果在方括号内添加脱字符( ^ )前缀,就表示定义处除了范围内之外的字符。例如:

[abc]查找方括号之间的任何字符
[^abc]查找任何不在方括号之间的字符
[0-9]查找任何从0-9的数字,即查找任何数字
[a-z]查找任何从小写a到小写z的字符,即查找任何小写字母
[A-Z]查找任何从大写A到大写Z的字符,即查找任何大写字母
[A-z]查找任何从大写A到小写z的字符,即查找任何形式的字母
[adgk]查找给定结合内的任何字符
[^adgk]查找给定集合外的任何字符

3、选择操作

选择类似于 JavaScrip t语法中的逻辑与,使用竖线( | )描述,表示在两个子模式的匹配结果中任选一个。例如:

//设计正则表达式匹配任意数字或字母
var s1 = "abc";
var s2 = "123";
var r = /\w+|\d+/;    //选择重复字符类
var b1 = r.test(s1);  //返回true
var b2 = r.test(s2);  //返回true

4、重复类量词

JavaScript 正则表达式约定了重复类量词,它们分别定义了重复匹配字符的确数或约数

量词描述
n+匹配任何包含至少一个 n 的字符串
n*匹配任何包含零个或多个 n 的字符串
n?匹配任何包含零个或一个 n 的字符串
n{x}匹配包含 x 个 n 的序列的字符串
n{x,y}匹配包含 x 个或 y 个 n 的序列的字符串
n{x,}匹配包含至少 x 个 n 的序列字符串
var r = /go?gle/g;        //匹配前一项字符o0次或1次
var r = /go{1,2}gle/g;    //匹配前一项字符o1次或2次

5、边界量词

边界就是确定匹配模式的位置,如字符串的头部或尾部。

量词说明
^匹配开头,在多行检测中,会匹配一行的开头
$匹配结尾,在多行检测中,会匹配一行的结尾

6、声明量词

声明量词包括正向声明和反响声明两种模式。正向声明:声明表示条件的意思,是指定匹配模式后面的字符必须被匹配,但不返回匹配结果。正向声明使用"(?=匹配条件)"表示。

var s = "a:213,b=456";
var r = /\w*(?==)/;     //使用正向声明,指定执行匹配必须满足的条件
var r1 = /\w*(?!=)/;    //使用反向声明,执行执行匹配不必满足的条件
var x = s.match(r);     //返回数组["b"]
var x1 = s.match(r1);   //返回数组["a"]

上面例子中,通过使用(?==)锚定条件,指定只有 \w*所能偶匹配的字符后面跟随一个等号字符,才能够执行 \w* 匹配,所以,最后匹配的结果是字符 b ,而不是字符 a 。vice versa。

7、表达式分组

使用小括号 () 操作符可以对正则表达式字符串进行任意分组,在小括号内的字符串表示子表达式,或者称为子模式,子表达式具有独立的匹配功能,匹配结果页具有独立性。同时跟随在小括号后的量词将会作用于整个子表达式。

把单个项目进行分组,以便合成子表达式。这样就可以像处理一个独立的字符那样,使用I、+、*或?等元字符来处理它们。

var s = "javascript is not java";
var r = /java(script)?/g;
var a = s.match(r);    //返回数组("javascript","java")

上面的正则表达式可以匹配字符串 ”javascript”,也可以匹配字符串"java”,因为在匹配模式中通过分组,使用量词 “?” 来修饰该子表达式,这样匹配字符串时,其后既可以有 “script”,也可以没有。

8、子表达式引用

在正则表达式执行匹配运算时,表达式计算会自动把每个分组 (子表达式) 匹配的文本临时存储起来以备将来使用。这些存储在分组中的特殊值,被称为反向引用。反向引用将遵循从左到右的顺序,根据表达式中的左括号字符的顺序进行创建和编号。

本例定义匹配模式包含多个子表达式。

var s = "abcdefghijklmn";
var r = /(a(b(c)))/;
var a = s.match(r);    //返回数组["abc","bc","c"]