【Javascript】正则表达式

2017-09-05  本文已影响0人  NinthG

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

字符中大致可分为四类

范围类

[a-zA-Z0-9]:匹配一个字符,这个字符可以是大写字母、小写字母、数字中的任意一个

预定义类

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

边界类

\b:单词边界
^:以xxx开头(在[]中使用时为取反)
$:以xxx结尾

量词

*:出现零次或多次(任意次)
+:出现一次或多次(至少出现一次)
?:出现零次或一次(最多出现一次)


写一个函数trim(str)

去除字符串两边的空白字符

function trim(str) {
    return str.replace(/^\s+|\s+$/g, '');
}
trim(' NinthG ')

写一个函数isEmail(str)

判断用户输入的是不是邮箱

// 判断依据:
//邮箱格式xxxx@xx.com,即若干字符链接'@'后,连接若干字符,再连接'.'后接'com'
function isEmail(str) {
    return /^\w*@\w*\.\w*$/.test(str)?'合法输入':'非法输入' //以单词字符开头后接'@'后接若干字符,接'.'再接若干字符,最后以三目运算符输出检测结果
}
//测试输出
isEmail('joaisjoas@.askda.asfa')
"非法输入"
isEmail('joaisjoas@askda.asfa')
"合法输入"
isEmail('j oaisjoas@askda.asfa')
"非法输入"

写一个函数isPhoneNum(str)

判断用户输入的是不是手机号

// 判断依据:以1开头的连续11位数字
function isPhoneNum(str) {
    return /^1\d{10}$/.test(str)?'合法输入':'非法输入' //以1开头后接10个数组,最后以三目运算符输出检测结果
}
//测试输出
isPhoneNum('12345678910')
"合法输入"
isPhoneNum('13051941205')
"合法输入"
isPhoneNum('13051941205999')
"非法输入"
isPhoneNum('a13051941205999')
"非法输入"

写一个函数isValidUsername(str)

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

// 判断依据:以1开头的连续11位数字
function isValidUsername(str) {
    return /^\w{6,20}$/.test(str)?'合法输入':'非法输入' //6~20个单词字符,最后以三目运算符输出检测结果
}
//测试输出
isValidUsername('abcdefghijklmnopqrst')
"合法输入"
isValidUsername('abcdefghi_jklmnopqrst')
"非法输入"
isValidUsername('abcde')
"非法输入"

贪婪模式与非贪婪模式

这个模式的区别主要针对于{x,y}的量词形式,阐述的是:在同时满足x和y的情况下到底取x还是y的区别

贪婪模式

根据课件及查阅,我们可以知道,在未做特殊声明时,默认是使用贪婪模式,结合上面的例子,也就是说默认会取y个,这个模式叫做贪婪模式

非贪婪模式

而我们有的时候用到正则中的范围量词时,有特殊需求,需要少取多次的时候,就需要用到非贪婪模式,也就是希望取x,如果都满足,那就取多次,这叫做非贪婪模式,简单来书就是在量词后加上?

举例

var str = '0123456789'

// 贪婪模式

str.match(/\d{3,4}/g)
(2) ["0123", "4567"]
str.match(/\d{3,5}/g)
(2) ["01234", "56789"]

// 非贪婪模式

str.match(/\d{3,5}?/g)
(3) ["012", "345", "678"]
str.match(/\d{4,5}?/g)
(2) ["0123", "4567"]

简单的总结来说,贪婪模式,在两个参数均满足情况下,优先考虑y,而非贪婪模式,优先考虑x

上一篇下一篇

猜你喜欢

热点阅读