題目1: \d拄养,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分別是什么?
題目2:寫一個函數(shù)trim(str)泰偿,去除字符串所有的空白字符
function trim(str){
var reg = /\s/g
var newStr = str.replace(reg,"")
return newStr
}
var a = " 1 2 4 "
console.log(trim(a)) //"124"
### 題目2.1:寫一個函數(shù)trim(str)熟尉,去除字符串兩邊的空白字符
function trim(str){
var reg = /^\s+|\s+$/g
var newStr = str.replace(reg,"")
return newStr
}
var a = " 1 2 4 "
console.log(trim(a)) //"1 2 4"
題目3: 寫一個函數(shù)isEmail(str)南用,判斷用戶輸入的是不是郵箱
//判斷郵箱
function isEmail(str){
if(!/(\w{8,})@[a-z0-9]{2,3}\.com$/.test(str)){
console.log("我不是郵箱")
}else{
console.log("歡迎使用")
}
}
isEmail("1614527443@qq.com")
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<label>郵箱:</label><input type="text" onblur="checkNetEase(this)" onfocus="reset(this)" placeholder="郵箱">
<script>
function checkNetEase(mobileInput){
var value = mobileInput.value;
/*我對郵箱的規(guī)則不是太清楚
*用戶名至少8位吧
*@后面觀察qq,網(wǎng)易等,不超過3個字符
*以.com結(jié)尾
*/
if(!/(\w{8,})@[a-z0-9]{2,3}\.com$/.test(value)){
mobileInput.style.borderColor = 'red';
}
}
function reset(mobileInput){
mobileInput.style.borderColor = '';
}
</script>
</body>
</html>
題目4: 寫一個函數(shù)isPhoneNum(str),判斷用戶輸入的是不是手機號
//判斷手機號
function isPhoneNum(str){
if(!/^1\d{10}$/.test(str)){
console.log("不好意思,請您重新輸入手機號")
}else{
console.log("OK")
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<input type="text" id="mobile" onblur="check(this)" onfocus="reset(this)">
<script>
function check(mobileInput){
var value = mobileInput.value;
//手機第一位是1,后面有十位數(shù)字
if(!/^1\d{10}$/.test(value)){
mobileInput.style.borderColor = 'red';
}
}
function reset(mobileInput){
mobileInput.style.borderColor = '';
}
</script>
</body>
</html>
題目5: 寫一個函數(shù)isValidUsername(str)芍锦,判斷用戶輸入的是不是合法的用戶名(長度6-20個字符竹勉,只能包括字母、數(shù)字娄琉、下劃線)
function isValidUsername(str){
if(/^\w{6,20}$/.test(str)){
console.log("我是合法的用戶名")
}else{
console.log("我不是合法的")
}
}
isValidUsername("str1234")
題目6: 什么是貪婪模式和非貪婪模式
貪婪模式
- 默認情況下次乓,
?, +, *, {min,}, {min, max}
都是貪婪的。
先看一個正則:
var str = 'a "witch" and her "broom" is one';
str.match( /".*"/g); //[""witch" and her "broom""]
結(jié)果匹配的不是["witch"],也不是["broom"],而是[""witch" and her "broom""]
我們來看一下正則
- 第一個字符是
"
,所以正則匹配到第一個"
- 是
.(點號)*(星號)
點號代表任意字符星號代表任意字符重復一次到多次,沒有遇到點號不能匹配的字符,所以一直到最后 - 文本結(jié)束后车胡,點的匹配停止了檬输,但仍然有剩余的的正則需要匹配照瘾,即:
"
因此匈棘,正則引擎開始倒過來回溯,換句話說析命,就是一個字符一個字符縮減匹配主卫。 - 一直字符縮減到匹配到
"
- 所以結(jié)果是
[""witch" and her "broom""]
總結(jié):在貪婪(默認)模式下,正則引擎盡可能多的重復匹配字符
非貪婪模式
- 非貪婪模式和貪婪模式相反鹃愤,可通過在代表數(shù)量的標示符后放置
?
來開啟非貪婪模式簇搅,如?、+?甚至是??
软吐。
上一個例子
var str = 'a "witch" and her "broom" is one';
str.match(/".*?"/g ) // [""witch"", ""broom""]
驚不驚喜意不意外?結(jié)果竟然不一樣
我們繼續(xù)看一下正則
- 看看非貪婪模式
.?
是怎么運轉(zhuǎn)的瘩将。
- 第一個字符是
"
,所以正則匹配到第一個"
- 第二步一樣,
.
被匹配上 - 第三步區(qū)別來了,
正則引擎嘗試用最小可能的重復次數(shù)
來進行匹配,因此在.匹配了w后姿现,它立即嘗試"
的匹配 - .重復更多的字符肠仪,再進行嘗試.
- 匹配,終于匹配到
"witch"
- 因為正則是
global
的,所以正則引擎繼續(xù)后面的匹配备典,從引號后面的a字符開始异旧。后面有匹配到第二個字符串"broom"
總結(jié):在非貪婪模式下,正則引擎盡可能少的重復匹配字符