进阶7 正则表达式

1: \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分别是什么?

\d digit 数字字符
\w word 单词字符 (包括字母、数字、下划线)
\s space 空白符 (包括制表符、换行符、垂直制表符、换页符、回车符、空格)
[a-zA-Z0-9] 大小写字母及数字
\b border 单词边界,包括字符串开头、结尾,空白符号和中横线 - 都可以作为单词边界
. 除了换行符、回车符之外的所有字符

  • 量词,代表任意次数
  • 量词,至少出现一次
    ? 量词,最多出现一次
    x{3} 匹配 x连续出现3次 xxx
    ^ 边界,以某某某开头, 另外 ^ 有取反之意, 和 [ ] 组合可以创建反向类,如: [^abc] 表示不是a或者b或者c的字符
    $ 边界,以某某某结尾

2: 写一个函数trim(str),去除字符串两边的空白字符

function trim(str){
  return str.replace(/^\s+|\s+$/g, '')
}
trim(' 1231ffd sdfsdf s-&*^5 ') //"1231ffd sdfsdf s-&*^5"

3: 写一个函数isEmail(str),判断用户输入的是不是邮箱

function isEmail(str){
  return /^\w\.?\w+@\w+(\.\w+)+$/.test(str)
}
 isEmail('[email protected]') //true

4: 写一个函数isPhoneNum(str),判断用户输入的是不是手机号

function isPhoneNum(str){
  return /^1[34578]\d{9}$/.test(str)
}
isPhoneNum(14299092309) //true

5: 写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)

function isValidUsername(str){
  return /^\w{6,20}$/.test(str)
}
isValidUsername('wangpeng199451') //true

6: 写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,只包括大写字母、小写字母、数字、下划

function isValidPassword(str){
  switch(true){
    case !/^\w{6,20}$/.test(str):
      return false 
      // return是直接结束当前函数返回 break是直接结束当前循环返回,这里函数内只有循环,可以省略 break
    case /^[a-z]{6,20}$/.test(str):
      return false
    case /^[A-Z]{6,20}$/.test(str):
      return false
    case /^\d{6,20}$/.test(str):
      return false
    case /^_{6,20}$/.test(str):
      return false
    default:
      return true
  }
}
isValidPassword('wangpeng199451') //true

7: 写一个正则表达式,得到如下字符串里所有的颜色

var re = /#[0-9a-fA-F]{6}/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""]   这里数组 length = 1

因为默认是贪婪模式, .除换行回车之外的任意字符,也就包括了引号,*代表任意次数,很贪婪尽可能多的匹配,
一只匹配到末尾,接着匹配正则表达式里的最后的引号 ",所以又倒着匹配,刚好第一个就是 " 。

var str = 'hello  "hunger" , hello "world"';
var pat =  /".*?"/g; // 只需要在这里给量词 * 指定非贪婪模式即可
str.match(pat); // 输出 [""hunger"", ""world""]

你可能感兴趣的:(进阶7 正则表达式)