午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > JavaScript系列文章:詳解正則表達式基本知識

JavaScript系列文章:詳解正則表達式基本知識

熱門標簽:css百度地圖標注位置顯示 地圖標注商戶中心要收錢多少 菏澤智能ai電銷機器人銷售公司 地圖標注字母的軟件 宿遷智能外呼系統供應商 鄂州人工智能電銷機器人軟件 實用地圖標注app 線上教育ai外呼系統 400免費電話去哪申請

正則表達式是一個精巧的利器,經常用來在字符串中查找和替換,JavaScript語言參照Perl,也提供了正則表達式相關模塊,開發當中非常實用,在一些類庫或是框架中,比如jQuery,就存在大量的正則表達式,所以說學好正則表達式,是提高開發技能的一項基本要求。那么今天博主就來詳細總結一下正則表達式的相關知識,希望不熟悉的同學們,也能夠掌握正則表達式的原理及應用。

在JS中,創建正則表達式有兩種方式,一種是字面量方式,一種是構造器方式,如下所示:

var regex = /\w+/;

// 或者

var regex = new RegExp('\\w+');

大家也許注意到,使用字面量要比構造器簡潔得多,\w表示一個word,匹配單個字母、數字或下劃線,而使用RegExp構造器時,我們的正則變為了"\\w",這是因為要在字符串中表示一個反斜杠\,我們需要對其轉義,也就是在前面再加一個轉義字符\。相信大家都知道,要在字面量正則中表達一個匹配反斜杠\的正則,只需寫成\\這樣,但在字符串中表達這個正則,則是"\\\\"這個樣子的,這是因為字符串中前兩個表示一個反斜杠\,后兩個也表示一個反斜杠\,最終在正則層面,結果還是\\。

對于上面兩種創建形式,都可以加上一些后綴修飾符,這些修飾符可以單個使用,也可以組合起來使用:

復制代碼 代碼如下:

/\w+/g; // global search
/\w+/i; // ignore case
/\w+/m; // multi-line
/\w+/u; // unicode
/\w+/y; // sticky

/\w+/gi;
new RegExp('\\w+', 'gi');


從英文注釋來看,相信大家都大概都略知一二了,需要注意的是u和y修飾符,它們是ES6新增的特性,u表示啟用Unicode模式,對于匹配中文特別有用,而y是sticky,表示“粘連”,跟g很相似,都屬于全局匹配,但它們也有不同之處,這個我們后面會介紹。

正則相關方法

有了正則表達式對象了,如何使用呢?JS中的正則和字符串在原型中均提供相應的方法,先來看看正則原型中的兩個方法:

RegExp.prototype.test(str);
RegExp.prototype.exec(str);

上面的test()和exec()方法都需傳入一個字符串,對這個字符串進行搜索和匹配,不同的是,test()方法會返回true或false,表示字符串和正則是否匹配,而exec()方法在匹配時返回一個匹配結果數組,如果不匹配,則只返回一個null值,下面來看看兩者的差異:

// RegExp#test()

var regex = /hello/;
var result = regex.test('hello world');  // true

// RegExp#exec()

var regex = /hello/;
var result = regex.exec('hello world');  // ['hello']

對于exec()方法,如果正則中含有捕獲組,匹配后則會出現在結果數組中:

// (llo)是一個捕獲組

var regex = /he(llo)/;
var result = regex.exec('hello world');  // ['hello', 'llo']

開發當中,test()方法一般用于用戶輸入驗證,比如郵箱驗證,手機號驗證等等,而exec()方法一般用于從特定內容中獲取有價值的信息,比如從用戶郵箱輸入中獲取其ID和郵箱類型,從手機號中獲取此號碼的歸屬地等等。

字符串相關方法

上面是正則原型中的兩個方法,現在來看看字符串原型中都提供了哪些可用的方法:

String.prototype.search(regexp);
String.prototype.match(regexp);
String.prototype.split([separator[, limit]]);
String.prototype.replace(regexp|substr, newSubStr|function);

先來說說String#search()方法,它會根據正則參數對字符串進行匹配搜索,如果匹配成功,就返回第一次匹配處的索引,如果匹配失敗,則返回-1。

// String#search()

'hello world'.search(/hello/);  // 0

'hello world'.search(/hi/);    // -1

String#match()方法跟RegExp#exec()方法相似,會返回結果數組,所不同的是,如果String#match()的正則參數中含有全局標記g,則結果中會只出現匹配的子串,而忽略捕獲組,這一點與RegExp#exec()有些出入。且看下面代碼:

// String#match()

'hello hello'.match(/he(llo)/);   // ['hello', 'llo']

// String#match()遇到全局g修飾符時會舍棄捕獲組

'hello hello'.match(/he(llo)/g);  // ['hello', 'hello']

// RegExp#exec()仍舊包含捕獲組

/he(llo)/g.exec('hello hello');   // ['hello', 'llo']

所以,如果需要總是將捕獲組作為結果返回,應該使用RegExp#exec()方法,而不是String#match()方法。

接下來說說String#split()方法,這個方法用于將字符串分割,然后返回一個包含其子串的數組結果,其中separator和limit參數都是可選的,separator可指定為字符串或正則,limit指定返回結果個數的最大限制。如果separator省略,該方法的數組結果中僅包含自身源字符串;如果sparator指定一個空字符串,則源字符串將被以字符為單位進行分割;如果separator是非空字符串或正則表達式,則該方法會以此參數為單位對源字符串進行分割處理。下面代碼演示了該方法的使用:

// String#split()

'hello'.split();         // ["hello"]
'hello'.split('');        // ["h", "e", "l", "l", "o"]
'hello'.split('', 3);       // ["h", "e", "l"]

// 指定一個非空字符串

var source = 'hello world';
var result = source.split(' ');  // ["hello", "world"]

// 或者使用正則表達式

var result = source.split(/\s/); // ["hello", "world"]
如果separtor是一個正則表達式,并且正則中包含捕獲組,則捕獲組也會出現在結果數組中:
// String#split() 正則捕獲組

var source = 'matchandsplit';

var result = source.split('and');   // ["match", "split"]

var result = source.split(/and/);   // ["match", "split"]

// 正則中含捕獲組

var result = source.split(/(and)/);  // ["match", "and", "split"]

最后來介紹一下String#replace()方法,它會同時執行查找和替換兩個操作。

從上面的函數簽名來看,該方法會接受兩個參數:第一個參數可以是一個正則表達式,也可以是一個字符串,它們都表示將要匹配的子串;第二個參數可以指定一個字符串或是一個函數,如果指定一個字符串,表示這個字符串將會替換掉已匹配到的子串,如果指定一個函數,則函數的返回值會替換掉已匹配的子串。

String#replace()方法最終會返回一個新的已經過替換的字符串。下面分別演示了replace方法的使用:

// String#replace()

var source = 'matchandsplitandreplace';

var result = source.replace('and', '-'); // "match-splitandreplace"

// 或者

var result = source.replace(/and/, function() {
 return '-';
});                    // "match-splitandreplace"

從上面的代碼中可以看到,'and'被替換成了'-',但我們同時也注意到,只有第一個'and'被替換了,后面的并沒有被處理。這里我們就需要了解,String#replace()方法只對第一次出現的匹配串進行替換,如果我們需要全局替換,需要將第一個參數指定為正則表達式,并追加全局g修飾符,就像下面這樣:

// String#replace() 全局替換

var source = 'matchandsplitandreplace';

var result = source.replace(/and/g, '-'); // "match-split-replace"

var result = source.replace(/and/g, function() {
 return '-';
});                    // "match-split-replace"

初學者看到上面的代碼,可能會覺得疑惑,對于第二個參數,直接指定一個字符串也挺簡單的嘛,我們為何要使用一個函數然后再返回一個值呢。我們看看下面的例子就知道了:

// String#replace() 替換函數的參數列表

var source = 'matchandsplitandreplace';

var result = source.replace(/(a(nd))/g, function(match, p1, p2, offset, string) {
 
 console.group('match:');
 console.log(match, p1, p2, offset, string);
 console.groupEnd();

 return '-';
});                    // "match-split-replace"

上面代碼中,第一個參數是正則表達式,其中包含了兩個捕獲組(and)和(nd),第二個參數指定一個匿名函數,其函數列表中有一些參數:match, p1, p2, offset, string,分別對應匹配到的子串、第一個捕獲組、第二個捕獲組、匹配子串在源字符串中的索引、源字符串,我們可以稱這個匿名函數為“replacer”或“替換函數”,在替換函數的參數列表中,match、offset和string在每一次匹配時總是存在的,而中間的p1、p2等捕獲組,String#replace()方法會根據實際匹配情況去填充,當然,我們還可以根據arguments獲取到這些參數值。

下面是代碼運行后的控制臺打印結果:

現在來看,指定一個函數要比指定一個字符串功能強的多,每次匹配都能獲取到這些有用的信息,我們可以對其進行一些操作處理,最后再返回一個值,作為要替換的新子串。所以推薦在調用String#replace()方法時,使用上面這種方式。

上面是String類與正則相關的常用方法,需要注意的是,String#search()和String#match()方法簽名中參數均為正則對象,如果我們傳遞了其他類型的參數,會被隱式轉換為正則對象,具體的步驟是先調用參數值的toString()方法得到字符串類型的值,然后調用new RegExp(val)得到正則對象:

// -> String#search(new RegExp(val.toString()))

'123 123'.search(1);    // 0
'true false'.search(true); // 0

'123 123'.search('\\s');  // 3

var o = {
 toString: function() {
  return '\\s';
 }
};
'123 123'.search(o);    // 3

// -> String#match(new RegExp(val.toString()))

'123 123'.match(1);     // ["1"]
'true false'.match(true);  // ["true"]

'123 123'.match('\\s');   // [" "]

var o = {
 toString: function() {
  return '1(23)';
 }
};
'123 123'.match(o);     // "123", "23"]

而split()和replace()方法不會將字符串轉為正則表達式對象,對于其他類型值,只會調用其toString()方法將參數值轉為字符串,也不會進一步向正則轉換,大家可以親自測試一下。

以上就是正則的相關基本知識及常用方法,限于篇幅原因,更多關于正則表達式的內容,博主會安排在下一篇中介紹和講解,敬請期待。

您可能感興趣的文章:
  • JavaScript正則表達式校驗非零的負整數實例
  • JavaScript正則表達式校驗非負整數實例
  • JavaScript正則表達式校驗非正整數實例
  • JavaScript利用正則表達式替換字符串中的內容
  • 利用js正則表達式校驗正數、負數、和小數
  • JS正則表達式的驗證
  • JS常用正則表達式及驗證時間的正則表達式
  • js正則表達式學習和總結(必看篇)
  • js正則表達式驗證URL函數代碼(方便多個正則對比)
  • js匹配網址url的正則表達式集合
  • JavaScript正則表達式校驗非零的正整數實例

標簽:綿陽 梅州 池州 六安 鞍山 恩施 三亞 咸陽

巨人網絡通訊聲明:本文標題《JavaScript系列文章:詳解正則表達式基本知識》,本文關鍵詞  JavaScript,系列,文章,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《JavaScript系列文章:詳解正則表達式基本知識》相關的同類信息!
  • 本頁收集關于JavaScript系列文章:詳解正則表達式基本知識的相關信息資訊供網民參考!
  • 推薦文章
    欧美一级一级性生活免费录像| 成人在线综合网| 国产日韩av一区| 亚洲精品国产成人| 97精品国产97久久久久久粉红| 久久成人国产精品入口| 久久免费看少妇高潮| 久久免费视频这里只有精品| 久久人人爽av| 精品亚洲porn| 亚洲精品理论电影| 欧美一区二区三区精美影视| 久久高清内射无套| 国产精品久久久久久久久动漫 | 欧美一区二区三区啪啪| 国产精品夜夜夜一区二区三区尤| 91久久免费视频| 18成人在线视频| 91成人福利在线| 国产性猛交96| 久久亚洲精精品中文字幕早川悠里| 久久久久久久一区二区| 95视频在线观看| 91丨porny丨国产| 日韩av电影在线免费播放| 波多野结衣av在线观看| 欧美激情一区二区三区全黄| 欧美精品18videosex性欧美| 亚洲成人av免费在线观看| 久久久久久97三级| 91九色蝌蚪国产| 国产在线综合网| 欧美午夜精品久久久| 日本丰满大乳奶| 天堂一区二区在线| 久久综合久久八八| 深爱五月激情网| 亚洲亚洲人成综合网络| 丰满人妻一区二区三区53视频| 国产成人免费网站| 欧美一区二区三区…… | 日韩欧美激情视频| 中文字幕精品av| 熟女少妇内射日韩亚洲| 亚洲国产精品av| 久久亚洲一区二区| 国产一区不卡精品| 精品国产青草久久久久福利| 国产原创剧情av| 久久久久久亚洲综合影院红桃| 欧美在线观看网址综合| 国产免费一区二区三区四在线播放| 成人国产视频在线观看| 最新中文字幕日本| 国内精品免费午夜毛片| 国产激情一区二区三区| h无码动漫在线观看| 精品久久久视频| 91av在线免费视频| 国产三区二区一区久久| 国产视频一区二区在线| 鲁大师私人影院在线观看| 久久人人爽人人爽人人片av高清| 精品一区二区av| 99视频精品免费| 亚洲精品久久久久中文字幕欢迎你| 国产绿帽刺激高潮对白| 精品999在线观看| 国产麻豆成人精品| 亚洲一区二区三区av无码| 日韩成人在线观看| 福利电影一区二区三区| 一个色综合久久| 欧美va日韩va| 欧美熟妇另类久久久久久多毛| 欧美日韩一区二区三区四区五区| 无码国产69精品久久久久同性| 91高潮在线观看| 五月婷婷狠狠干| 亚洲欧美日韩国产成人综合一二三区| 一区二区三区国产精品| 麻豆av免费观看| 亚洲国内精品在线| 香蕉视频xxxx| 精品久久人人做人人爱| 久久人妻少妇嫩草av蜜桃| 亚洲男同性视频| 欧美大片欧美激情性色a∨久久| 大胸美女被爆操| 中文字幕精品www乱入免费视频| 蜜臀精品一区二区三区| 成人网在线视频| 国产一区二区三区精品视频| 日本欧美色综合网站免费| 国产精品看片你懂得| 狠狠躁狠狠躁视频专区| 国内精品久久久| 亚洲男人天堂av网| 日韩一级在线播放| 人人妻人人澡人人爽| 韩国成人动漫在线观看| 欧美va亚洲va国产综合| 亚洲aaaaaaa| 亚洲欧美日韩精品一区| 日韩精品中文字幕一区| 欧美自拍偷拍第一页| 国产毛片久久久久久国产毛片| 日韩高清a**址| 在线观看你懂的网站| 77777少妇光屁股久久一区| 国产精品99久| 日本天堂在线视频| 成人污网站在线观看| 亚洲成色777777女色窝| 蜜臀久久99精品久久久| 国产免费一区二区三区视频| 亚洲日本护士毛茸茸| 日韩在线视频免费播放| 日本午夜精品一区二区| 久久亚洲电影天堂| 婷婷久久综合九色综合绿巨人| 奇米一区二区三区av| 91香蕉视频在线播放| 日韩精品一区二区三区色偷偷| 欧美在线观看视频一区二区三区| 精品国产xxx| 亚洲一区二区三区精品动漫| 精品国产一区二区三区不卡| 国产黄色片在线免费观看| 国产99久久久欧美黑人| 一区二区三区免费看视频| 中文字幕免费播放| 精品久久中出| 亚洲电影免费观看高清| 国产风韵犹存在线视精品| 一区二区三区四区五区视频| 日韩视频免费观看| 成人免费高清在线| 99精品在线看| 国产盗摄x88av| 日本www高清视频| 精品蜜桃一区二区三区| 久久久www成人免费精品| 色综合视频一区二区三区高清| 麻豆精品精品国产自在97香蕉| 男人操女人动态图| 97免费视频在线| 欧美日韩午夜剧场| 亚洲精品18p| chinese麻豆新拍video| 欧美日韩国产999| 91免费看视频| 欧美特级一级片| 污污视频网站在线| 丝袜美腿玉足3d专区一区| 亚洲精品天天看| 99久久精品国产网站| 久久国产黄色片| 亚洲一区亚洲二区亚洲三区| 亚洲mv在线观看| 青青草一区二区三区| 国产乡下妇女做爰毛片| 三级性生活视频| 成人免费在线视频播放| 国产91aaa| 九色成人免费视频| 亚洲成人激情自拍| 四虎精品永久在线| 日韩网址在线观看| 国产日韩欧美中文| 7777精品伊人久久久大香线蕉| 五月天激情开心网| 成人一级生活片| 久久人91精品久久久久久不卡| 欧美电影免费提供在线观看| 亚洲成人免费av| 99视频国产精品免费观看a| 91pony九色| 久久久99爱| 欧美日韩国产黄| 视频在线观看国产精品| 中国美女黄色一级片| 在线观看免费的av| 成人性视频欧美一区二区三区| 欧美图片激情小说| 免费拍拍拍网站| 中文字幕欧美人与畜| 精品免费日产一区一区三区免费| 欧美在线一级va免费观看| 欧美一区二区三级| 亚洲日本在线天堂| 国产美女无遮挡永久免费| 亚洲色图日韩精品| 亚洲第一中文av| 欧美一区二区三区在线播放| 国产亚洲精品久久久久久牛牛| 国产三级精品在线| av手机天堂网| 日本青青草视频| 国产精品理论在线| avav在线看| 精品欧美国产一区二区三区不卡| 日韩av一区二区在线| 亚洲成人午夜电影| 手机看片久久久| 99国产精品免费视频| 欧美 另类 交| 91久久中文字幕| 91网站在线看| y111111国产精品久久婷婷| 成人久久一区二区三区| 成人精品一区二区三区| 国产精品丝袜一区二区三区| 全亚洲最色的网站在线观看| 久久6精品影院| 欧美三级中文字幕在线观看| 亚洲国产精品成人久久综合一区| 色噜噜在线播放| 国产高潮久久久| 午夜视频在线免费看| 黄色动漫网站入口| 久久久久女教师免费一区| 亚洲精品国产一区二区三区四区在线| 久久丁香综合五月国产三级网站| 美女看a上一区| 久久精品久久久精品美女| 日韩乱码一区二区三区| 日韩成人av影院| ww国产内射精品后入国产| 欧美1o一11sex性hdhd| 亚洲精品美女在线观看| 欧美性猛交xxxx免费看| 久久久综合激的五月天| 日韩电影一区二区三区| 韩国成人在线视频| av电影天堂一区二区在线| 久久久国产一区二区三区四区小说| 国产精品国产三级国产普通话三级| 国产精品三级电影| 亚洲欧洲日韩综合一区二区| 亚洲欧美aⅴ...| 久久色成人在线| 国产精品 欧美精品| 在线免费黄色av| 日韩精品一区二区亚洲av性色| 色一情一乱一伦一区二区三区日本| 精品国偷自产一区二区三区| 91免费版黄色| 久久99久久久久久久噜噜| 日韩一级黄色片| 亚洲日本一区二区| 欧美日韩在线视频一区二区| 欧美日韩国产综合视频在线观看中文 | 日韩精彩视频| 国产专区欧美专区| 欧美日韩一区二区三区高清| 日韩欧美在线网址| 欧美激情综合网| 久久久国产一区二区三区四区小说 | 亚洲欧洲日韩一区二区三区| 久久综合狠狠综合久久激情| 99久久国产免费看| 天天综合天天色| 欧美一级做性受免费大片免费| 成人黄色免费网| 少妇一级淫片免费放中国| 亚洲色图日韩精品| 色国产在线视频| 无码熟妇人妻av在线电影| 日韩一区不卡| 米仓穗香在线观看| 国产欧美精品一二三| 亚洲图片第一页| 国产精品无码专区| 国产一级伦理片| 3d动漫精品啪啪一区二区下载| 97免费公开视频| 鲁丝片一区二区三区| 三区精品视频观看| 欧美日韩精品免费看 | 3d动漫精品啪啪一区二区下载 | 国产对白在线播放| www一区二区www免费| 中文字幕avav| 午夜在线观看一区| 久久久久香蕉视频| 精品国产乱码久久久久久鸭王1 | 中文字幕亚洲欧美在线| 成人高清在线视频| 男人搞女人网站| 成人免费看片视频在线观看| 成人av免费在线看| 久久午夜a级毛片| 欧美高清www午色夜在线视频| 一区二区在线观看免费视频播放| 91丨九色porny丨蝌蚪| 久久精品国产在热久久| 成人a v视频| 五月天婷婷丁香网| 图片区偷拍区小说区| 少妇高潮毛片色欲ava片| 色播亚洲婷婷| 国产高清在线一区| 国产精品va在线播放| 欧美成人精品三级在线观看| 日韩精品免费在线视频观看| 色综合久久久久综合99| 国产精品高潮久久久久无| 久久影音资源网| 91丨九色丨蝌蚪富婆spa| 91偷拍与自偷拍精品| 99精品久久只有精品| 国产91精品入口| 91丝袜美腿高跟国产极品老师| 精品一区二区三区在线播放 | 国产精品久久一卡二卡| 国产日韩在线不卡| 久久久久久久久免费| 中文字幕巨乱亚洲| 亚洲欧洲另类国产综合| 一区二区三区在线免费| 亚洲一区二区三区四区的| 亚洲午夜在线观看视频在线| 亚洲欧美日韩中文字幕一区二区三区 | 99国产成人精品| 无码人妻精品一区二区三区9厂 | 成人免费视频国产免费观看| 熟女高潮一区二区三区| 亚洲综合网在线| 久热这里只有精品6| 中文字幕理论片| 丰满大乳国产精品| 国产熟女一区二区三区四区| 五月天激情婷婷| 久88久久88久久久| 成人网在线免费视频| 成人av先锋影音| 91小视频免费观看| 中文字幕在线观看不卡视频| 亚洲国产综合在线| 91国偷自产一区二区开放时间 | 99视频一区二区| 一区二区三区欧美日| 在线一区二区三区| 日精品一区二区| 极品美女销魂一区二区三区| 岛国精品一区二区| 综合激情成人伊人| 欧美三级中文字幕| 亚洲美女在线观看| 欧美激情性做爰免费视频| 国产精品普通话| 青娱乐一区二区| 国产日韩欧美精品在线观看| 日本不卡一区在线| 丰腴饱满的极品熟妇| 日本黄色小说视频| 51国产偷自视频区视频| 亚洲国产av一区二区| 国产成人免费xxxxxxxx| 国产精品日韩成人| 色偷偷成人一区二区三区91| 在线成人免费视频| 中文字幕欧美日韩精品| 国产精品成av人在线视午夜片| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 国产成人av一区二区三区在线| 中文字幕一区免费在线观看| 色一情一乱一乱一91av| 日韩成人在线免费观看| 热99精品只有里视频精品| 日产中文字幕在线精品一区| 亚洲欧美aaa| www.涩涩爱| 一级特黄特色的免费大片视频| 久久 天天综合| 国产精品久久久久久久久晋中| 欧洲国内综合视频| 亚洲精品一区久久久久久| 日本精品免费一区二区三区| 亚洲国产高清国产精品| 俄罗斯黄色录像| 中文字幕在线一| 男女男精品视频| 欧美日韩国产丝袜另类| 中文国产亚洲喷潮| 波多野结衣久草一区| 老汉色影院首页| 人妻少妇精品视频一区二区三区| 久久99国产综合精品免费| 蜜桃视频免费观看一区| 一区二区三区成人在线视频| 亚洲国产另类久久精品| 国产精品视频白浆免费视频| 自慰无码一区二区三区| 久久精品视频免费在线观看| 男人的j进女人的j一区| 欧美日韩午夜剧场| 国产亚洲精品久久久久久777| 成人自拍视频网站| 岛国精品一区二区三区| 日韩免费一级片| 激情深爱一区二区| 色综合久久久久| 久久91亚洲精品中文字幕| 日韩欧美三级电影| 婷婷色一区二区三区| 丝袜亚洲另类丝袜在线| 狠狠综合久久av一区二区小说| 久久最新资源网|