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
的含义是
但是我们可以使用元字符
[]
来构建一个简单的类, 比如[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 结尾 |
网友评论