正则表达式

2017-09-04  本文已影响12人  饥人谷_林嘉俊

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;
上一篇下一篇

猜你喜欢

热点阅读