2012年9月24日星期一

JavaScript正则表达式和模式匹配


元字符
+ :元字符规定其前导字符必须在目标对象中连续出现一次或多次。
* :元字符规定其前导字符必须在目标对象中出现零次或连续多次。
? :元字符规定其前导对象必须在目标对象中连续出现零次或一次。
\s :用于匹配单个空格符,包括tab 键和换行符。
\S :用于匹配除单个空格符之外的所有字符。
\d :用于匹配从0 到9 的数字。
\w :用于匹配字母,数字或下划线字符。
\W :用于匹配所有与\w 不匹配的字符。

(说明:我们可以把\s 和\S 以及\w 和\W 看作互为逆运算。同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符

定位符
^ :定位符规定匹配模式必须出现在目标字符串的开头。
$ :定位符规定匹配模式必须出现在目标对象的结尾。
\b :定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一。
\B :定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。

/fo+/
因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者
“football”等在字母f 后面连续出现一个或多个字母o 的字符串相匹配。

/eg*/
因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e 后面连续出现零个或多个字母g 的字符串相匹配。

/Wil?/
因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者 “Wilson”,等在字母i 后面连续出现零个或一个字母l 的字符串相匹配。

/^hell/
因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或
“hellhound”开头的字符串相匹配。

/ar$/
因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。

/\bbom/
因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。

/man\b/
因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或“man”结尾的字符串相匹配。

字符类(“^”、“-”、“\”
/[^A-C]/
上述字符串将会与目标对象中除A,B,和C 之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。


[A-Za-z0-9!#&*+=?_-] 匹配模式 “[]” 里面的特殊字符(*+?)并不是元字符


/Th\*/
上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。反斜杠“\”表示转义字符序列,比如“\*”表示字符*,“\n”表示换行。

下列式子表示可以匹配3 个数字或者4 个小写字母:
var filter =/\d{3}|[a-z]{4}/;

还有一个'|',表示"或"操作:

"hi|hello":表示一个字符串里有"hi"或者"hello";
"(b|cd)ef":表示"bef"或"cdef";
"(a|b)*c":表示一串"a""b"混合的字符串后面跟一个"c";

'.'可以替代任何字符:

"a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
"^.{3}$":表示有任意三个字符的字符串(长度为3个字符);

匹配模式
/jim{2,6}/
上述正则表达式规定字符m 可以在匹配对象中连续出现2-6 次,因此,上述正则表达式可以同jimmy 或jimmmmmy 等字符串相匹配。



运算顺序优先级

依然遵循从左到→右的运算规则


( )  圆括号因为是内存处理所以最高
* ? +  { } 重复匹配内容其次
^ $ \b 边界处理第三
|  条件处理第四
最后按照运算顺序计算匹配


补充:JavaScript RegExp 对象参考手册

没有评论:

发表评论