首页 > 代码库 > javascript之正则表达式
javascript之正则表达式
创建正则表达式的两种方法
显式:
new RegExp(“pattern”[,”flags”]);
例
var regex = new ("abc","gi");第一个参数为要匹配的模式,第二个为标识信息,有三种标识信息:
g:全局标识,表示对文本中所有匹配的部分起作用,如不设置,则仅搜索和匹配第一个出现的文本段 global
i:忽略大小写标识 ignoreCase
m:多行标识,如不设置这标识,那么元字符“^”和“$”只与文本的开始位置和结尾位置相匹配,如果设置此标识,还可以与字符串中“\n”、“\r”后的位置,即下一行的行首和行尾进行匹配 multiLine
隐式:
/pattern/[flags] 不用加引号
例
var regex = /\w+/i; var regex = new RegExp("\\w+","i");以上两者是等价的,当用显式构造函数时,模式字符串中的特殊符号应该使用转义字符,即加上“\”前导符号
模式匹配符
\ 指出后面的字符为特殊字符
^ 匹配的字符必须在最前面
$ 匹配的字符必须在最后面
* 匹配前面的字符0次或n次
+ 至少1次
? 0或1次
. 匹配除换行符之外的所有单个字符
x|y 匹配x或y
(x) 标记子表达式的起止位置
{n} 匹配前面的n个字符
{n,} 匹配前面的至少n个字符
{n,m} 匹配前面的n到m个字符
[xyz] 匹配列出的任意字符
[^xyz] 匹配列出的任意字符的补集,即匹配列出字符之外的其他任意字符
[a-d] 匹配abcd当中的任意字符
[\b] 匹配一个空格
\b 匹配一个单词的分界线,比如一个空格
\B 匹配一个单词的非分界线
\d 匹配一个数字,等价于[0-9]
\D 匹配一个非数字
\f 匹配一个表单符
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空单符,包括空格、Tab、feed、form、换行符,等价于 [\f\n\r\t\v]
\S 匹配一个制表符
\w 匹配所有的字母、数字及下划线,等价于[A-Za-z1-9_]
\W 匹配\w的补集
贪婪匹配与非贪婪匹配
正则表达式默认贪婪匹配,即使用最长匹配原则
例 要将“book”中匹配“bo?”的部分替换成“l”,替换结果为“lok”,而不是“look”
当“?”紧跟在任何其他限定符(*、+、?、{n}、{n,m})之后时,使用非贪婪模式
例 有字符串“booook”,“bo+?”只匹配“bo”部分,而“bo+”匹配“boooo”
选择匹配符
“|”的两个选项是两边尽可能最大的表达式
例 “abcd|efgh2”匹配的是“abcd”或“efgh”,而不是“abcd2”或“efgh2”,如要匹配“abcd2”或“efgh2”,应该创建“(abcd|efgh)2”
特殊字符
如果要匹配以下特殊字符的字面意思,需用“\”进行转义
^ $ * + ? . ( ) [ ] { } | \ /
正则表达式的静态属性
(1)index属性。是当前表达式模式首次匹配内容的开始位置,从0开始计数。其初始值为-1,每次成功匹配时,index属性都会随之改变。
(2)input属性。返回当前所作用的字符串,可以简写为$_,初始值为空字符串""。
(3)lastIndex属性。是当前表达式模式首次匹配内容中最后一个字符的下一个位置,从0开始计数,常被作为继续搜索时的起始位置,初始值为-1,表示从起始位置开始搜索,每次成功匹配时,lastIndex属性值都会随之改变。
(4)lastMatch属性。是当前表达式模式的最后一个匹配字符串,可以简写为$&。其初始值为空字符串""。在每次成功匹配时,lastMatch属性值都会随之改变。
(5)lastParen属性。如果表达式模式中有括起来的子匹配,是当前表达式模式中最后的子匹配所匹配到的子字符串,可以简写为$+。其初始值为空字符串""。每次成功匹配时,lastParen属性值都会随之改变。
(6)leftContext属性。是当前表达式模式最后一个匹配字符串左边的所有内容,可以简写为$`(其中“‘”为键盘上“Esc”下边的反单引号)。初始值为空字符串""。每次成功匹配时,其属性值都会随之改变。
(7)rightContext属性。是当前表达式模式最后一个匹配字符串右边的所有内容,可以简写为$‘。初始值为空字符串""。每次成功匹配时,其属性值都会随之改变。
(8)$1…$9属性。这些属性是只读的。如果表达式模式中有括起来的子匹配,$1…$9属性值分别是第1个到第9个子匹配所捕获到的内容。如果有超过9个以上的子匹配,$1…$9属性分别对应最后的9个子匹配。在一个表达式模式中,可以指定任意多个带括号的子匹配,但RegExp对象只能存储最后的9个子匹配的结果。在RegExp实例对象的一些方法所返回的结果数组中,可以获得所有圆括号内的子匹配结果。
实例属性
(1)global属性。返回创建RegExp对象实例时指定的global标志(g)的状态。如果创建RegExp对象实例时设置了g标志,该属性返回True,否则返回False,默认值为False。
(2)ignoreCase属性。返回创建RegExp对象实例时指定的ignoreCase标志(i)的状态。如果创建RegExp对象实例时设置了i标志,该属性返回True,否则返回False,默认值为False。
(3)multiLine属性。返回创建RegExp对象实例时指定的multiLine标志(m)的状态。如果创建RegExp对象实例时设置了m标志,该属性返回True,否则返回False,默认值为False。
(4)source属性。返回创建RegExp对象实例时指定的表达式文本字符串。
RegExp对象的方法
test方法
语法格式为test(str)。该方法检查一个字符串中是否存在创建RegExp对象实例时所指定的表达式模式,如果存在就返回True,否则返回False。如果找到匹配项,则会更新RegExp对象中的有关静态属性,以反映匹配情况。
exec方法
语法格式为exec(str)。该方法使用创建RegExp对象实例时所指定的表达式模式对一个字符串进行搜索,并返回一个包含搜索结果的数组。
如果为正则表达式设置了全局标志(g),可以通过多次调用exec和test方法在字符串中进行连续搜索,每次都是从RegExp对象的lastIndex属性值指定的位置开始搜索字符串。
如果没有设置全局标志(g),则exec和test方法忽略RegExp对象的lastIndex属性值,从字符串的起始位置开始搜索。
如果exec方法没有找到匹配,返回值为null;如果找到匹配,则返回一个数组,并更新RegExp对象中有关静态属性以反映匹配情况。返回数组中的元素0包含了完整的匹配结果,而元素1~n依次是表达式模式中定义的各个子匹配的结果。
exec方法返回的数组有3个属性,分别是input、index和lastIndex。
input属性是整个被搜索的字符串。
index属性是指匹配在整个被搜索字符串中的位置。
lastIndex属性是指匹配的子字符串的最后一个字符的下一个字符位置。
javascript之正则表达式