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
”更简略的表达式。