正则表达式
http://www.cnblogs.com/yitian/archive/2008/11/14/1333569.html
题目1: \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分别是什么?
下面是一些常见的元字符:
. 匹配除 \n 以外的任何字符(注意元字符是小数点)。
[abcde] 匹配 abcde 之中的任意一个字符
[a-h] 匹配 a 到 h 之间的任意一个字符
[^fgh] 不与 fgh 之中的任意一个字符匹配
\w 匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于 [a-zA-Z0-9_]
\W 不匹配大小写英文字符及数字 0 到 9 之间的任意一个,相当于 [^a-zA-Z0-9_]
\s 匹配任何空白字符,相当于 [ \f\n\r\t\v]
\S 匹配任何非空白字符,相当于 [^\s]
\d 匹配任何 0 到 9 之间的单个数字,相当于 [0-9]
\D 不匹配任何 0 到 9 之间的单个数字,相当于 [^0-9]
[\u4e00-\u9fa5] 匹配任意单个汉字(这里用的是 Unicode 编码表示汉字的 )
下面是一些常见的限定符 ( 下表中 n 和 m 都是表示整数,并且 0<n<m) :
* 匹配 0 到多个元字符,相当于 {0,}
? 匹配 0 到 1 个元字符,相当于 {0,1}
{n} 匹配 n 个元字符
{n,} 匹配至少 n 个元字符
{n,m} 匹配 n 到 m 个元字符
+ 匹配至少 1 个元字符,相当于 {1,}
\b 匹配单词边界
^ 字符串必须以指定的字符开始
$ 字符串必须以指定的字符结束
另外题目中的
[a-zA-Z0-9] 包含所有英文小写字母a-z和大写字母A-Z,以及数字0-9
x{3} 量词,表示x出现3次
题目2: 写一个函数trim(str),去除字符串两边的空白字符
function trim(str){
if(typeof str === 'string'){
return str.replace(/^\s+|\s+$/g,'');
}else{
return '不是字符串';
}
}
题目3: 写一个函数isEmail(str),判断用户输入的是不是邮箱
function isEmail(str){
var email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
return email.test(str);
}
题目4: 写一个函数isPhoneNum(str),判断用户输入的是不是手机号
function isPhoneNum(str){
var num = /^1[0-9]{10}$/;
return num.test(str);
}
题目5: 写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)
function isVaildUsername(str){
return /^\w{6,20}$/.test(str);
}
题目6: 写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,只包括大写字母、小写字母、数字、下划线,且至少至少包括两种)
function isValidPassword(str){
if(!/^\w{6,20}$/.test(str)){
return false;
}
if(/^\d{6,20}$/.test(str)){
return false;
}
if(/^[a-z]{6,20}$/.test(str)){
return false;
}
if(/^[A-Z]{6,20}$/.test(str)){
return false;
}
if(/^_{6,20}$/.test(str)){
return false;
}
return true;
}
题目7: 写一个正则表达式,得到如下字符串里所有的颜色
var reg = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})(?=;)/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
console.log( subj.match(re) ) // ['#121212', '#AA00ef']
题目8: 下面代码输出什么? 为什么? 改写代码,让其输出[""hunger"", ""world""].
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g;
str.match(pat);
意思是:匹配以"开头"结束,且引号中为任意个除换行符和回车以外的任意字符,全局匹配。
默认是贪婪模式,会尽可能多匹配,所以结果为
[""hunger" , hello "world""]
而要想得到[""hunger"", ""world""]的结果可以将正则改为如下代码:
可以加上?变成非贪婪模式 尽可能少匹配
var pat = /".*?"/g;