关闭

关闭

关闭

封号提示

内容

首页 JS的正则表达式.doc

JS的正则表达式.doc

JS的正则表达式.doc

上传者: ningyong 2012-07-26 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《JS的正则表达式doc》,可适用于IT/计算机领域,主题内容包含JavaScript中的正则表达式字符描述将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。例如'n'匹配字符"n符等。

JavaScript中的正则表达式字符描述将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。例如'n'匹配字符"n"。'n'匹配一个换行符。序列''匹配""而"("则匹配"("。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性^也匹配'n'或'r'之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性$也匹配'n'或'r'之前的位置。*匹配前面的子表达式零次或多次。例如zo*能匹配"z"以及"zoo"。*等价于{,}。匹配前面的子表达式一次或多次。例如'zo'能匹配"zo"以及"zoo"但不能匹配"z"。等价于{,}。匹配前面的子表达式零次或一次。例如"do(es)"可以匹配"do"或"does"中的"do"。等价于{,}。{n}n是一个非负整数。匹配确定的n次。例如'o{}'不能匹配"Bob"中的'o'但是能匹配"food"中的两个o。{n,}n是一个非负整数。至少匹配n次。例如'o{,}'不能匹配"Bob"中的'o'但能匹配"foooood"中的所有o。'o{,}'等价于'o'。'o{,}'则等价于'o*'。{n,m}m和n均为非负整数其中n<=m。最少匹配n次且最多匹配m次。刘"o{,}"将匹配"fooooood"中的前三个o。'o{,}'等价于'o'。请注意在逗号和两个数之间不能有空格。当该字符紧跟在任何一个其他限制符(*,,,{n},{n,},{n,m})后面时匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如对于字符串"oooo"'o'将匹配单个"o"而'o'将匹配所有'o'。匹配除"n"之外的任何单个字符。要匹配包括'n'在内的任何字符请使用象'n'的模式。(pattern)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到在VBScript中使用SubMatches集合在JScript中则使用$…$属性。要匹配圆括号字符请使用'('或')'。(:pattern)匹配pattern但不获取匹配结果也就是说这是一个非获取匹配不进行存储供以后使用。这在使用"或"字符(|)来组合一个模式的各个部分是很有用。例如'industr(:y|ies)就是一个比'industry|industries'更简略的表达式。(=pattern)正向预查在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配也就是说该匹配不需要获取供以后使用。例如'Windows(=||NT|)'能匹配"Windows"中的"Windows"但不能匹配"Windows"中的"Windows"。预查不消耗字符也就是说在一个匹配发生后在最后一次匹配之后立即开始下一次匹配的搜索而不是从包含预查的字符之后开始。(!pattern)负向预查在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配也就是说该匹配不需要获取供以后使用。例如'Windows(!||NT|)'能匹配"Windows"中的"Windows"但不能匹配"Windows"中的"Windows"。预查不消耗字符也就是说在一个匹配发生后在最后一次匹配之后立即开始下一次匹配的搜索而不是从包含预查的字符之后开始x|y匹配x或y。例如'z|food'能匹配"z"或"food"。'(z|f)ood'则匹配"zood"或"food"。xyz字符集合。匹配所包含的任意一个字符。例如'abc'可以匹配"plain"中的'a'。^xyz负值字符集合。匹配未包含的任意字符。例如'^abc'可以匹配"plain"中的'p'。az字符范围。匹配指定范围内的任意字符。例如'az'可以匹配'a'到'z'范围内的任意小写字母字符。^az负值字符范围。匹配任何不在指定范围内的任意字符。例如'^az'可以匹配任何不在'a'到'z'范围内的任意字符。b匹配一个单词边界也就是指单词和空格间的位置。例如'erb'可以匹配"never"中的'er'但不能匹配"verb"中的'er'。B匹配非单词边界。'erB'能匹配"verb"中的'er'但不能匹配"never"中的'er'。cx匹配由x指明的控制字符。例如cM匹配一个ControlM或回车符。x的值必须为AZ或az之一。否则将c视为一个原义的'c'字符。d匹配一个数字字符。等价于。D匹配一个非数字字符。等价于^。f匹配一个换页符。等价于xc和cL。n匹配一个换行符。等价于xa和cJ。r匹配一个回车符。等价于xd和cM。s匹配任何空白字符包括空格、制表符、换页符等等。等价于fnrtv。S匹配任何非空白字符。等价于^fnrtv。tv匹配一个垂直制表符。等价于xb和cK。w匹配包括下划线的任何单词字符。等价于'AZaz'。W匹配任何非单词字符。等价于'^AZaz'。xXX匹配十六进制XX转义值。十六进制转义值必须为确定的两个数字长。例如'x'匹配"A"。'x'则等价于'x'""。正则表达式中可以使用ASCII编码。num匹配num其中num是一个正整数。对所获取的匹配的引用。例如'()'匹配两个连续的相同字符。n标识一个八进制转义值或一个后向引用。如果n之前至少n个获取的子表达式则n为后向引用。否则如果n为八进制数字()则n为一个八进制转义值。nm标识一个八进制转义值或一个后向引用。如果nm之前至少有nm个获取得子表达式则nm为后向引用。如果nm之前至少有n个获取则n为一个后跟文字m的后向引用。如果前面的条件都不满足若n和m均为八进制数字()则nm将匹配八进制转义值nm。nmluXXXX匹配Unicode字符其中XXXX是一个用四个十六进制数字表示的Unicode字符。例如uA匹配版权符号‘’下表中列出的字符转义在正则表达式和替换模式中都会被识别。转义符说明一般字符除$^{(|)*外其他字符与自身匹配。a与响铃(警报)u匹配。b如果在字符类中则与退格符u匹配如果不是这种情况请参见本表后面的“注意”部分。tr与回车符uD匹配。v与垂直Tab符uB匹配。f与换页符uC匹配。n与换行符uA匹配。e与Esc符uB匹配。将ASCII字符匹配为八进制数(最多三位)如果没有前导零的数字只有一位数或者与捕获组号相对应则该数字为后向引用。(有关详细信息请参见反向引用。)例如字符 表示空格。x使用十六进制表示形式(恰好两位)与ASCII字符匹配。cC与ASCII控制字符匹配例如cC为CtrlC。u使用十六进制表示形式(恰好四位)与Unicode字符匹配。在后面带有不识别为转义符的字符时与该字符匹配。例如*与xA相同。注意   转义字符b是一个特例。在正则表达式中b表示单词边界(w和W之间的字符)不过在字符类中b表示退格符。在替换模式中b始终表示退格符。只在替换模式中允许替换。对于正则表达式中的类似功能使用后向引用(如)。有关后向引用的详细信息请参见反向引用和反向引用构造。字符转义和替换是在替换模式中识别的唯一的特殊构造。下面几部分描述的所有语法构造只允许出现在正则表达式中替换模式中不识别它们。例如替换模式a*${txt}b插入字符串“a*”后跟由txt捕获组匹配的子字符串(如果有的话)再后跟字符串“b”。在替换模式中*字符不会识别为元字符。与此类似在正则表达式匹配模式中不识别$模式。在正则表达式中$指定字符串的结尾。下表显示如何定义命名并编号的替换模式。字符说明$number替换由组号number(十进制)匹配的最后一个子字符串。${name}替换由(<name>)组匹配的最后一个子字符串。$$替换单个“$”字符。$替换完全匹配本身的一个副本。$`替换匹配前的输入字符串的所有文本。$'替换匹配后的输入字符串的所有文本。$替换最后捕获的组。$替换整个输入字符串。字符类是一个字符集如果字符集中的任何一个字符有匹配它就会找到该匹配项。下表总结了字符匹配语法。字符类说明与除n之外的任何字符匹配。如果已用Singleline选项做过修改则句点字符将与任何字符匹配。有关详细信息请参见正则表达式选项。aeiou与指定字符集中包含的任何单个字符匹配。^aeiou与不在指定字符集中的任何单个字符匹配。afAF使用连字号(–)允许指定连续字符范围。p{name}与{name}指定的命名字符类中的任何字符匹配。支持的名称为Unicode组和块范围。例如Ll、Nd、Z、IsGreek、IsBoxDrawing。P{name}与在{name}中指定的组和块范围中未包含的文本匹配。w与任何单词字符匹配。等效于Unicode字符类别p{Ll}p{Lu}p{Lt}p{Lo}p{Nd}p{Pc}。如果用ECMAScript选项指定了符合ECMAScript的行为则w等效于azAZ。W与任何非单词字符匹配。等效于Unicode类别^p{Ll}p{Lu}p{Lt}p{Lo}p{Nd}p{Pc}。如果用ECMAScript选项指定了符合ECMAScript的行为则W等效于^azAZ。s与任何空白字符匹配。等效于Unicode字符类别fnrtvxp{Z}。如果用ECMAScript选项指定了符合ECMAScript的行为则s等效于fnrtv。S与任何非空白字符匹配。等效于Unicode字符类别^fnrtvxp{Z}。如果用ECMAScript选项指定了符合ECMAScript的行为则S等效于^fnrtv。d与任何十进制数字匹配。等效于p{Nd}(对于Unicode类别)和(对于非Unicode类别)ECMAScript行为。D与任何非数字匹配。等效于P{Nd}(对于Unicode类别)和^(对于非Unicode类别)ECMAScript行为。原子零宽度断言下表中描述的元字符不会使引擎在字符串中前进或使用字符。它们只是根据字符串中的当前位置使匹配成功或失败。断言说明^指定匹配必须出现在字符串的开头或行的开头。有关详细信息请参见正则表达式选项中的Multiline选项。$指定匹配必须出现在以下位置:字符串结尾、字符串结尾的n之前或行的结尾。有关详细信息请参见正则表达式选项中的Multiline选项。A指定匹配必须出现在字符串的开头(忽略Multiline选项)。Z指定匹配必须出现在字符串的结尾或字符串结尾的n之前(忽略Multiline选项)。z指定匹配必须出现在字符串的结尾(忽略Multiline选项)。G指定匹配必须出现在上一个匹配结束的地方。与MatchNextMatch()一起使用时此断言确保所有匹配都是连续的。b指定匹配必须出现在w(字母数字)和W(非字母数字)字符之间的边界上。匹配必须出现在单词边界上即出现在由任何非字母数字字符分隔的单词中第一个或最后一个字符上。B指定匹配不得出现在b边界上。下表描述了影响匹配数量的元字符。限定符说明*指定零个或更多个匹配例如w*或(abc)*。等效于{,}。指定一个或多个匹配例如w或(abc)。等效于{,}。指定零个或一个匹配例如w或(abc)。等效于{,}。{n}指定恰好n个匹配例如(pizza){}。{n,}指定至少n个匹配例如(abc){,}。{n,m}指定至少n个但不多于m个匹配。*指定尽可能少地使用重复的第一个匹配(等效于lazy*)。指定尽可能少地使用重复但至少使用一次(等效于lazy)。指定使用零次重复(如有可能)或一次重复(lazy)。{n}等效于{n}(lazy{n})。{n,}指定尽可能少地使用重复但至少使用n次(lazy{n,})。{n,m}指定介于n次和m次之间、尽可能少地使用重复(lazy{n,m})。分组构造使您可以捕获子表达式组并提高具有非捕获预测先行和回顾后发修饰符的正则表达式的效率。下表描述了正则表达式分组构造。分组构造说明(   )捕获匹配的子字符串(或非捕获组有关详细信息请参见正则表达式选项中的ExplicitCapture选项)。使用()的捕获根据左括号的顺序从开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本。(<name>   )将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号并且不能以数字开头。可以使用单引号替代尖括号例如('name')。(<namename>)平衡组定义。删除先前定义的name组的定义并在name组中存储先前定义的name组和当前组之间的间隔。如果未定义name组则匹配将回溯。由于删除name的最后一个定义会显示name的先前定义因此该构造允许将name组的捕获堆栈用作计数器以跟踪嵌套构造(如括号)。在此构造中name是可选的。可以使用单引号替代尖括号例如('namename')。(:   )非捕获组。(imnsximnsx:   )应用或禁用子表达式中指定的选项。例如(is:)将打开不区分大小写并禁用单行模式。有关详细信息请参见正则表达式选项。(=   )零宽度正预测先行断言。仅当子表达式在此位置的右侧匹配时才继续匹配。例如w(=d)与后跟数字的单词匹配而不与该数字匹配。此构造不会回溯。(!   )零宽度负预测先行断言。仅当子表达式不在此位置的右侧匹配时才继续匹配。例如b(!un)wb与不以un开头的单词匹配。(<=   )零宽度正回顾后发断言。仅当子表达式在此位置的左侧匹配时才继续匹配。例如(<=)与跟在后面的的实例匹配。此构造不会回溯。(<!   )零宽度负回顾后发断言。仅当子表达式不在此位置的左侧匹配时才继续匹配。(>   )非回溯子表达式(也称为“贪婪”子表达式)。该子表达式仅完全匹配一次然后就不会逐段参与回溯了。(也就是说该子表达式仅与可由该子表达式单独匹配的字符串匹配。)命名捕获根据左括号的从左到右的顺序按顺序编号(与非命名捕获类似)但在对所有非命名捕获进行计数之后才开始对命名捕获进行编号。例如模式((<One>abc)d)(<Two>xyz)(*)按编号和名称产生下列捕获组。(编号为的第一个捕获总是指整个模式)。编号名称模式(默认名称)((<One>abc)d)(<Two>xyz)(*)(默认名称)((<One>abc)d)(默认名称)(*)(<One>abc)(<Two>xyz)下表列出了用于将后向引用修饰符添加到正则表达式中的可选参数。后向引用构造定义number后向引用。例如(w)查找双写的单词字符。k<name>命名后向引用。例如(<char>w)k<char>查找双写的单词字符。表达式(<>w)执行同样的操作。可以使用单引号替代尖括号例如k'char'。下表列出了用于修改正则表达式以允许进行二者之一或匹配的特殊字符。替换构造定义|与用|(垂直条)字符分隔的任何一个术语匹配例如cat|dog|tiger。使用最左侧的成功匹配。((expression)yes|no)如果表达式在此位置匹配则与“yes”部分匹配否则与“no”部分匹配。“no”部分可省略。表达式可以是任何有效的子表达式但它将变为零宽度断言因此该语法等效于((=expression)yes|no)。请注意如果表达式是命名组的名称或捕获组编号则替换构造将解释为捕获测试(在本表的下一行对此进行了描述)。若要避免在这些情况下产生混淆则可以显式拼出内部(=expression)。((name)yes|no)如果命名捕获字符串有匹配则与“yes”部分匹配否则与“no”部分匹配。“no”部分可省略。如果给定的名称不与此表达式中使用的捕获组的名称或编号对应则替换构造将解释为表达式测试(在本表的上一行进行了描述)。下表列出了用于修改正则表达式的子表达式。构造定义(imnsximnsx)对诸如不区分大小写这样的选项进行设置或禁用以使其在模式中间打开或关闭。有关特定选项的信息请参见正则表达式选项。在封闭组结束之前选项更改将一直有效。请参见有关分组构造(imnsximnsx:)的信息它是一个更为巧妙的形式。(#   )插入到正则表达式内部的内联注释。该注释在第一个右括号字符处终止。#至行尾X模式注释。该注释以非转义的#开头并继续到行的结尾。(请注意必须激活x选项或RegexOptionsIgnorePatternWhitespace枚举选项才能识别此类注释。)

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/4
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部