web前端-js小記(7)-正則表達(dá)式

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

符號 含義
\d [0-9] 表示數(shù)字字符
\w [a-zA-Z0-9_] 表示數(shù)字,大小寫字母及下劃線
\s [\t\n\x0B\f\r] 表示空白符
[a-zA-Z0-9] 表示大小寫字母,數(shù)字字符
\b 表示單詞邊界
. 表示除回車符換行符的所有字符
* 出現(xiàn)0次或多次(任意次)
+ 出現(xiàn)1一次或多次(最少出現(xiàn)一次)
? 出現(xiàn)0次或1次(最多出現(xiàn)一次)
x{3} 表示x字符出現(xiàn)3次
^ 以什么字符做為開頭
$ 以什么字符做為結(jié)尾
[^abc] 表示不是abc的所有字符
abc{3,5}? ?在量詞后面表示非貪婪模式,若字符串匹配,c取3個
(abc){10} 表示abc字符連續(xù)出現(xiàn)10次
abc(?=def) 匹配后面為def的abc

1、RegExp 相關(guān)方法

  1. RegExp.prototype.test(str)
//測試字符串參數(shù)中是否存正則表達(dá)式模式,如果存在則返回true
var reg = /\d+\.\d{1,2}$/g;
reg.test('123.45'); //true
reg.test('34.5678'); //false
  1. RegExp.prototype.exec(str)
//用的不多
//正則表達(dá)式模式在字符串中查找,若找到了匹配的,返回一個結(jié)果數(shù)組,否則返回null
var reg = /\d/g;
var r = reg.exec('a1b2c3');
  1. String.prototype.search(reg)
//檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串,忽略標(biāo)志g,返回字符串的第一個匹配的位置
'a1b2c3'.search(/\d/g); //1
'a1b2c3'.search(/\d/); //1
  1. String.prototype.match(reg)
//非全局調(diào)用:只能執(zhí)行一次匹配,返回?cái)?shù)組,第一個元素存放的是匹配文本,第二個元素存放index,是匹配文本的起始字符在字符串中的位置,第三個元素存放input,是檢索的字符串
var r = 'aaa123456'.match(/\d/);   //["1", index: 3, input: "aaa123456"]

//全局調(diào)用:返回?cái)?shù)組,存放的是字符串中所有的匹配子串,沒有index和input
var r = 'aaa123456'.match(/\d/g);  //["1", "2", "3", "4", "5", "6"]
  1. String.prototype.replace(reg, replaceStr)
//1、string對象的replace方法,我們最常用的是傳入兩個字符串的做法,但這種做法有個缺陷,只能replace一次
// 2、replace方法的第一個參數(shù)還可以傳入RegExp對象,可以進(jìn)行全局替換

'abcabcabc'.replace('bc','X'); //aXabcabc
'abcabcabc'.replace(/bc/g,'X'); //aXaXaX
  1. String.prototype.split(reg)
//和replace方法類似,在一些復(fù)雜的分割情況下我們可以使用正則表達(dá)式解決。
'a,b,c,d'.split(',');   //["a", "b", "c", "d"];
'a1b2c3d'.split(/\d/);   //["a", "b", "c", "d"]

2、寫一個函數(shù)trim(str),去除字符串兩邊的空白字符

function trim(str){
  var reg=/(^\s+|\s+$)/g;
  return str.replace(reg,"");
}
var result=trim("  345");
var result1=trim("\nabs");

3、寫一個函數(shù)isEmail(str),判斷用戶輸入的是不是郵箱

function isEmail(str){
  var reg=/\w+@[0-9a-zA-Z]+[.][a-z]+/g;
  return reg.test(str);
}
var result1=isEmail("234@qq.com");
var result2=isEmail("abc@123.123");

4、寫一個函數(shù)isPhoneNum(str),判斷用戶輸入的是不是手機(jī)號

function isPhoneNum(str){
  var reg=/^1\d{10}$/g;
  return reg.test(str);
}
var result1=isPhoneNum("1205425879a");
var result2=isPhoneNum("12457896312a");
var result3=isPhoneNum("12012456789");

5、寫一個函數(shù)isValidUsername(str),判斷用戶輸入的是不是合法的用戶名(長度6-20個字符,只能包括字母、數(shù)字、下劃線)

function isValidUsername(str){
  var reg=/^\w{6,20}$/g;
  return reg.test(str);
}
var result1=isValidUsername("ast");
var result2=isValidUsername("astsdg/n");
var result3=isValidUsername("astsd/n");
var result4=isValidUsername("astsdg");
var result5=isValidUsername("astsdgastsdgastsdgsd");

6、寫一個函數(shù)isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長度6-20個字符,只包括大寫字母、小寫字母、數(shù)字、下劃線,且至少包括兩種)

function isValidPassword(str){
  if(!/^\w{6,20}$/.test(str)) return false;
  if(/^\d{6,20}$/.test(str)|/^[a-z]{6,20}$/.test(str)|/^[A-Z]{6,20}$/.test(str)|/^_{6,20}$/.test(str)) return false;
  return true;
}
var result1=isValidPassword("abretedggdfgfg");
var result2=isValidPassword("456456dfgdfg");
var result3=isValidPassword("____________");

7、寫一個正則表達(dá)式,得到如下字符串里所有的顏色

var re = /(#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})(?=;))/g
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
console.log(subj.match(re))  // ['#121212', '#AA00ef']

8、下面代碼輸出什么? 為什么? 改寫代碼,讓其輸出[""hunger"", ""world""].

var str = 'hello  "hunger" , hello "world"';
var pat =  /".*"/g;
str.match(pat); 

輸出[""hunger" , hello "world""]
原因:因?yàn)?表示除了回車符和換行符的所有字符,代表出現(xiàn)0次或多次,而且后面沒有?,說明是貪婪模式,是竟可能多的匹配,g代表全局搜索,所以得到這結(jié)果

var str = 'hello  "hunger" , hello "world"';
var pat =  /".*?"/g;     //?表示非貪婪模式的匹配,匹配中用盡可能少的次數(shù)去匹配,所以得到不同結(jié)果
str.match(pat); 

(mission 7)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 正則表達(dá)式(Regular Expression)是計(jì)算機(jī)科學(xué)的一個概念。正則表達(dá)式使用單個字符串來描述、匹配一系...
    草鞋弟閱讀 771評論 0 0
  • 正則表達(dá)式 正則表達(dá)式(Regular Expression)是計(jì)算機(jī)科學(xué)的一個概念。正則表達(dá)式使用單個字符串來描...
    yshenhn閱讀 369評論 0 0
  • RegExp是正則表達(dá)式的縮寫正則表達(dá)式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串。 正則的定義方法...
    饑人谷_廖珍閱讀 339評論 0 1
  • 一、問答 1.\d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^$分別是什么? \d :...
    我是小韓閱讀 347評論 0 0
  • www.cnblogs.com/hai-ping/articles/2997538.html /判斷輸入內(nèi)容是否為...
    自話閱讀 1,056評論 0 1