【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