JavaScript 正则表达式
JavaScript? 正則表達(dá)式
版權(quán)聲明:未經(jīng)授權(quán),嚴(yán)禁轉(zhuǎn)載!
正則表達(dá)式?
什么是正則表達(dá)式
正則表達(dá)式是用來描述一種特定格式的字符規(guī)則的表達(dá)式。
正則表達(dá)式常用語在一段文本中搜索,匹配或者替換特定形式的文本。如:詞語出現(xiàn)的頻率統(tǒng)計(jì)、驗(yàn)證字符串是否符合郵箱格式、屏蔽一篇帖子中的限制性詞語等。也叫做“模式匹配”。
正則表達(dá)式由一些普通字符和一些元字符及特殊符號(hào)組成。普通字符包括大小寫的字母和數(shù)字,而元字符則具有特殊的含義。
如何定義
使用 // 來表示一個(gè)正則表達(dá)式。
最簡(jiǎn)單的正則表達(dá)式,就是字符串本身,比如: /hello/ 。
可以使用元字符來匹配某一些字符串,比如: /1[3579]\d{9}/ 。
正則表達(dá)式中有些字符有特殊的語法含義,是不能夠直接使用的,必須使用 \ 進(jìn)行轉(zhuǎn)以后才可以使用。
.? \? /? *? ?? +? [? (? )? ]? { ? }? ^? $ ? |
修飾符
模式匹配中可以使用如下三個(gè)屬性修飾符。
字符集
?正則表達(dá)式使用如下語法匹配一個(gè)范圍內(nèi)的字符。
元字符
正則表達(dá)式中可以使用如下元字符來進(jìn)行簡(jiǎn)化。
量詞
可以使用如下特殊字符定義前一個(gè)字符的出現(xiàn)次數(shù)。
選擇和分組
使用如下語法定義子表達(dá)式分組或選擇。
?
指定匹配位置
可以使用如下字符進(jìn)行指定位置的匹配
? ?
正則表達(dá)式 - 查找 search() / match()
學(xué)習(xí)案例代碼
var str = "Hi,2017年6月20日,我要和Mia、Tom、Jimmy去旅游" +"啦~~23333333333~~你要去的話就和我或Mia聯(lián)系,我們的電話是" +":13519005678/15898765432。";// search() 查找。找到第一次出現(xiàn)指定子字符串下標(biāo)的位置,如果沒找到返回-1. // 查找str中有沒有mia console.log(str.search("mia")); // -1 普通字符串查找,只能找到完全相同的。 console.log(str.search("Mia")); // 17 普通字符串查找,只能找到完全相同的。// 使用正則表達(dá)式 字符不需要加引號(hào),普通字符串匹配需要加 console.log(str.search(/mia/)); // -1 console.log(str.search(/mia/i)); // i表示不區(qū)分大小寫 17// match() 匹配,返回找到的指定子字符串組成的數(shù)組 console.log(str.match("Mia")); // 普通的字符串查找必須相同,默認(rèn)只能返回一次 console.log(str.match(/mia/i)); // 普通的字符串查找必須相同,默認(rèn)只能返回一次 console.log(str.match(/mia/ig)); // g 全局匹配,不只匹配一次// 匹配 我/你 console.log(str.match(/[我你]/g)) // []表示匹配中括號(hào)中任意一個(gè)字符。匹配字符串中所有的 “我” 和 “你”// 匹配年份 // 匹配任意一個(gè)數(shù)字 console.log(str.match(/[0-9]/g)); // [0-9]表示匹配任意一個(gè)數(shù)字。 console.log(str.match(/\d/g)); // \d表示匹配任意一個(gè)數(shù)字。 console.log(str.match(/[0-9][0-9][0-9][0-9]/g)); // 匹配任意連續(xù)四個(gè)數(shù)字。 console.log(str.match(/\d\d\d\d/g)); // 匹配任意連續(xù)四個(gè)數(shù)字。// 匹配連續(xù)數(shù)字 console.log(str.match(/[0-9]{4}/g)); // 匹配連續(xù)四個(gè)數(shù)字 console.log(str.match(/\d{4}/g)); // 匹配連續(xù)四個(gè)數(shù)字 console.log(str.match(/(19|20)\d{2}年/g)); // 匹配年份 19XX年 或者 20XX年
?
?正則表達(dá)式 - 分割 split()
?學(xué)習(xí)代碼案例
var str ="tom , jerry, mia, jack, Tom ,mary , jimmy";// 將所有的人名存進(jìn)一個(gè)數(shù)組 console.log(str.split(",")); // 使用普通字符串,只能識(shí)別一種分隔符。// 使用正則表達(dá)式 console.log(str.split(/[,,]/)); // 識(shí)別任意一種逗號(hào)。 console.log(str.split(/\s*[,,]\s*/)); // 包含逗號(hào)前后的0個(gè)或多個(gè)空格。// 將 str 字符串的每個(gè)字符分開 var str2 = "Hello World"; console.log(str2.split("")); console.log(str2.split(/\s*/)); // 以空格或非空格分割
正則表達(dá)式 - 替換 replace()
?學(xué)習(xí)代碼
var str = "tom , jerry, mia, jack, Tom ,mary , jimmy";// 將所有的逗號(hào)改為兩個(gè)空格。 console.log(str.replace(",", " ")); // 普通字符串 默認(rèn)只能替換第一個(gè)。// 使用正則表達(dá)式 console.log(str.replace(/\s*[,,]\s*/g, " "));// 將 tom 替換為 Alice console.log(str.replace(/tom/ig, "Alice"));// 找到說有的英文名稱 console.log(str.match(/[A-z]{2,}/g)) console.log(str.match(/[A-z]+/g))console.log(str.replace(/[A-z]+/g, "***"));// 將所有的英文名稱首字符替換成大寫 console.log(str.replace(/[A-z]+/g, function (word) {var r = word.replace(word[0], word[0].toUpperCase());return r; }));// 去掉所有空格 var str1 = "a b c d e f"; console.log(str1.replace(/\s+/g,""));
正則表達(dá)式對(duì)象?
?
?
?
?
var s1="Hello,今天是2017.6.20,我和tom、jerry在一起玩耍。";//匹配hellovar reg1=/hello/ig;var reg2=new RegExp("hello","ig");console.log(s1.match(reg1));console.log(s1.match(reg2));//匹配連續(xù)4個(gè)數(shù)字var reg3=/[0-9]{4}/g;var reg4=new RegExp("[0-9]{4}","g");var reg5=/\d{4}/g;var reg6=new RegExp("\\d{4}","g");//使用\開頭的元字符,需要再次使用\轉(zhuǎn)義,即雙斜杠 console.log(s1.match(reg3));console.log(s1.match(reg4));console.log(s1.match(reg5));console.log(s1.match(reg6));//匹配一個(gè).var reg7=/\./g;var reg8=new RegExp("\\.","g");//雙斜杠轉(zhuǎn)義 console.log(s1.match(reg7));console.log(s1.match(reg8));
?
//test(),用于檢測(cè)一個(gè)字符串是否匹配某個(gè)模式,若匹配,返回true;若不匹配,返回false//驗(yàn)證密碼:要求,密碼必須是6位數(shù)字var s1="123456";// var reg=/\d{6}/;//部分匹配var reg=/^\d{6}$/;//完全匹配,^表示匹配字符串的開頭,$表示匹配字符串的結(jié)構(gòu),驗(yàn)證時(shí)需要完全匹配console.log(reg.test(s1));
?
//exec(),查找字符串中可以匹配某個(gè)模式的子字符串,返回一個(gè)關(guān)聯(lián)數(shù)組,保存著子字符串及所在位置,若未找到,返回null//每次只能找一個(gè),重復(fù)調(diào)用可以自動(dòng)向后查找//屬性lastIndex中保存著下一次開始查找的位置,初始值為0var str="no zuo No die No can no chaochao";var reg=/no/ig;//找到所有的no及所在位置// console.log(reg.lastIndex);// console.log(reg.exec(str));// console.log(reg.lastIndex);// console.log(reg.exec(str));// console.log(reg.lastIndex);// console.log(reg.exec(str));// console.log(reg.lastIndex);// console.log(reg.exec(str));// console.log(reg.lastIndex);// console.log(reg.exec(str));// console.log(reg.lastIndex);// console.log(reg.exec(str));// console.log(reg.lastIndex);// console.log(reg.exec(str));// console.log(reg.lastIndex);do{var arr=reg.exec(str);if(arr==null) break;// console.log(arr);console.log("在"+arr["index"]+"處找到關(guān)鍵詞:"+arr[0]+",下一次開始查找的位置為:"+reg.lastIndex);}while(true)
?
?
結(jié)束了吧!哎!
?
轉(zhuǎn)載于:https://www.cnblogs.com/wjw1014/p/8980019.html
總結(jié)
以上是生活随笔為你收集整理的JavaScript 正则表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdoj-1715-大菲波数(大斐波那契
- 下一篇: BZOJ 1821: [JSOI2010