JavaScript中的正则表达式

时间:2022-11-11 15:25:18

计算机语言中的转义字符

\n 回车换行
\t 横向跳到下一制表位置
\v 竖向跳格 垂直制表符 == \x0B
\b 退格
\r 回车
\f 走纸换页

\u 使用数字指定的Unicode 字符,如\u2000
\x使用十六进制数指定的Unicode 字符,如\xc8


正则表达式语法

字符类

[...] 

匹配方括号中字符序列中的任意一个字符。其中可以使用连字符“-”匹配指定范围内的字符

例如:/[012]/可以与0A2B3C中的字符0.1.2匹配

[^...]

匹配方括号字符序列中未包含的任意字符。与[...]相反

.

匹配除了换行和回车以外的任意字符相当于[^\n\r]

\d

匹配任意一个的数字字符,相当于[0-9]

\D

匹配任意一个非数字字符,相当于[^0-9]

\s

匹配任意空白字符,如空格,制表符,换行符等。相当于[\t\n\x0B\f\r]

\S

匹配任意非空白字符,相当于[^\t\n\x0B\f\r]

\w

匹配任意英文字母,数字字符及下划线,相当于[a-zA-Z0-9_]

*:使用[^...]时候,如果“^"不是出现在"["后边,则仍表示字符"^"的原义。下面介绍"^"的原意义。

使用量词

正则表达式中,使用量词可以控制匹配字符、字符串出现的次数。

匹配前一项0次或1次

例如:/JS?/可以匹配JScript中的JS和JavaScript中的J

+

匹配前一项1次或多次,至少出现一次。

*

匹配前一项0次或多次

{n}

匹配前一项恰好n次,其中n为非负整数

{n,}

匹配前一项至少n次

{n,m}

匹配前一项至少n次,但不超过m次。n、m都为非负数。且n<=m

例如:/o{2,5}/可以与book中的两个o,booooooook中的5个连续的o匹配。

使用{n,m}限定符时,数字和","之间不能有空格

 指定匹配的位置

^

匹配字符串的行开头,字符"^"必须出项在指定字符串的最前面。

例如:/^g/可以匹配good中的g,但不能匹配bag中的g

$

匹配字符串的行结尾,字符"$"必须出项在指定字符串的最后边

例如:/g$/可以匹配bag中的g,但不能匹配good中的g

\b

匹配单词的边界

例如:/e\b/与I love seek中love的e匹配但和seek中的e不匹配。

\B

匹配单词的非边界

例如:/e\B/与I love seek 中seek的e相匹配,但和love中的e不匹配。

选择匹配符

|

选择匹配符可以匹配所指定的两个选项中的任意一个。

例如:/World|Dream/可以与”One World,One Dream"中的World或者Dream匹配。

分组

分组就是使用括号将多个单独的字符或字符类组合成子表达式,以便可以像处理一个独立的单元那样,应用|  *  + 或 ? 等来处理它们。例如:正则表达式;/J(ava)?Script/即与字符串“JavaScript”,又与字符串“JScript”相匹配。

创建正则表达式

在JavaScript中,正则表达式由RegExp对象表示。

通过RegExp类的构造方法创建

语法格式:new RegExp(patten[,flags])

pattern:必选参数,用于指定需要匹配的模式字符串

flags:可选参数,用于指定正则表达式的标志信息。

  g:全局标志,表示匹配字符串中出现的所有匹配子字符串;

  i:忽略大小写标志,,,在执行模式比配的时候不区分大小写。

  m:多行标志,如果不设置此标志,那么"^"只匹配字符串的开头,“$”只能匹配字符串的结尾,否则,“^”可以匹配多行字符串中的每一行的开头,“$”可以匹配多行字符串中每一行的结尾。

例如:

var objExp = new RegExp(“\\d”);  

var objExp = new RegExp(“\\d”,"g");   //上面的正则表达式只会匹配第一个出现的数字,如果想匹配所有出现的数字必须加一个全局标志g

*:必须在模式字符串“\”前面加上“\”,这是正常的字符串避开规则。

通过正则表达式字面量创建

语法格式:/pattern/[flags]

例如:var objExp = /\d/

   var objExp = /\d/g

应用RegExp执行模式匹配

test()方法

语法格式:regExp.test(str)

如果搜索到匹配的字符则返回true,否则返回false;

exec()方法

语法格式:regExp.exec(str)

当没有搜索到匹配的字符时,返回null;

否则返回一个数组,数组的第一个元素是与正则表达式匹配的字符串,其他元素包含的是匹配的各个分组,即:正则表达式中用括号括起来的子表达式匹配的字串。

 例如:

var str = "220104190008270343";

var objExp = /\d{6}([12]\d{3})([01]\d)([0123]\d)\d{4}/;

var arr = objExp.exec(str);

则arr数组的值为:

arr[0] : "220104190008270343"

arr[1] : "1900"

arr[2] : "08"

arr[3] : "27"