正则表达式

2019-03-18  本文已影响0人  antimony

1.什么是贪婪模式和非贪婪模式?

量词在默认下是尽可能多的匹配的,就是贪婪模式;非贪婪模式,让正则表达式尽可能少的匹配,也就是说一旦成功匹配不再继续尝试。


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

function isValidUsername(str){
  reg = /^[\w]{6,20}$/;//^$来保证str整个都符合正则
  return reg.test(str);
}
console.log(isValidUsername('sfsdfdsafdda'));

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

function isPhoneNum(str){
  reg = /^(\+86)?1[356789]\d{9}$/;//加号需要转义
  return reg.test(str);
}
console.log(isPhoneNum('13671575015'));

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

function isEmail(str){
  var reg = /^(\w)(.*)@\w{1,}\.(com|cn)$/;//邮箱不能以空白字符开头,并且注意.的转义
  return reg.test(str);
}
console.log(isEmail(str)('13671573015'));

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

function trim(str){
  reg = /(^\s+)|(\s+$)/g;//以空白字符开始或结尾
  return str.replace(reg,'');//用空字符串替换
}
console.log(trim('     dsfsfsd      '));

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

\d,\w,\s都是预定义类,预定类的表格如下:

字符 等价类 含义
. [^\r\n] 除了回车符和换行符之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白符
\S [^\t\n\x0B\f\r] 非空白符
\w [a-zA-Z_0-9] 单词字符,字母、数字下划线
\W [^a-zA-Z_0-9] 非单词字符

[a-zA-Z0-9]是字符类,表示单词字符、字母、数字。
字符类
一般情况下正则表达式一个字符(转义字符算一个)对应字符串一个字符,表达式 jirengu 的含义是

image
但是我们可以使用元字符[]来构建一个简单的类, 比如[abcd]代表一个字符,这个字符可以是 abcd四个字符中的任意一个

\b是一个边界,边界列表如下:

字符 含义
^ 以xxx开头
$ 以xxx结尾
\b 单词边界
\B 非单词边界

例子:

var str = 'hello1 world hello2 123456 \t \r jirengu \n ruoyu hello3'
str.match(/hello\d/g)   // ["hello1", "hello2", "hello3"]
str.match(/^hello\d/g)  // ["hello1"]
str.match(/hello\d$/g)   // ["hello3"]

var str2 = 'hello1 whello9orld hello2 12-hello8-3456 \t \r jirengu \n ruoyu hello3'
str2.match(/\bhello\d\b/g)   //["hello1", "hello2", "hello8", "hello3"] 
//注意-也用于区分单词边界

字符 含义
. 除了回车符和换行符之外的所有字符
* 出现零次或多次
+ 出现一次或多次(至少出现一次)
? 出现零次或一次(最多出现一次)
x{3} 匹配x 出现 3 次
^ 在正则表达式里面,是以 xxx 开头;在中括号里面,是匹配除了它以外的
$ 以 xxx 结尾
上一篇下一篇

猜你喜欢

热点阅读