javascript正则表达式实例分析

1.验证邮件格式是否正确:

/**
* 此函数进行Email格式检测.
* @param str 待检测字符串.
* @return 是Email格式返回真.
*/
function isEmail(str){
res = /^[0-9a-zA-Z_\-\.]+@[0-9a-zA-Z_\-]+(\.[0-9a-zA-Z_\-]+)+$/;
var re = new RegExp(res);
return !(str.match(re) == null);
}

这其中函数中res变量有几个问题需要注意:

1.res既然是字符串怎么不需要加引号?

声明正则表达式:varexp=/字符/;把要配备的字符放到”/”内

2.0-9,a-z,A-Z中的-是代表表示在一定范围?

“[XYZ] “ 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

“[a-z]” 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。

“[^a-z]” 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。

3.为什么\-\.需要加斜线而_不需要?

\  转义符

4.[]和()各表示什么?

操作符的优先级:

相同优先级的从左到右进行运算,不同优先级的运算先高后低。各种操作符的优先级从高到低如下:

\  转义符

(), (?:), (?=), []  圆括号和方括号

*, +, ?, {n}, {n,}, {n,m}  限定符

^, $, \anymetacharacter  位置和顺序

|    “或”操作


5.+和*有什么意义?

+” 元字符规定其前导字符必须在目标对象中连续出现一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

*” 元字符规定其前导字符必须在目标对象出现零次或连续多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

” 元字符规定其前导字符必须在目标对象中连续出现零次或多次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。


6./^.....$/代表啥意思?

如果能把这些问题搞懂详细你的正则表达式也算入门了吧 呵呵!

 

2.jQuery源码中正则表达式 quickExpr = /^(?:[^<](<[\w\W]+>)[^>]$|#([\w-]*)$)/通过它在检查jQuery的选择器Selector到底是<...>还是#id形式。如果是HTML字符串,那么会得到[match, match, undefined],而#id形式会得到[#id, undefined, id]的结果。这样就把字符串区别开了

例如:

quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
match = quickExpr.exec( "#item");
console.info(match);//["#item", undefined, "item"]
quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
match = quickExpr.exec( "<a>hello,world!</a>");
console.info(match);//["<a>hello,world!</a>", "<a>hello,world!</a>", undefined]


(?:pattern) 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。

 

 

 

posted @ 2012-02-22 09:22  zendwang  阅读(327)  评论(0编辑  收藏  举报