一 正在表達式的概述
1毕谴、正則表達式
正則表達式描述了一種字符串匹配的模式成畦,可以檢查一個字符串是否含有某種子字符串,將匹配到的子字符串用來提取出來或者做替換涝开。
模式:使用一種特殊符號來實現(xiàn)字符串的匹配羡鸥。
本文以javascript來闡述正則表達式的基礎(chǔ)知識和使用
功能:使用一種特殊符號來實現(xiàn)字符串的匹配
var reg = /\d/gi;
mysql如何匹配:
① 精準匹配 :select * from goods where title=’iphone 7 plus’; //一條
② 模糊匹配 :select * from goods where title like ‘%iphone 7 plus%’; //多條
2、為什么要使用正則表達式
數(shù)據(jù)隱藏 (188********092張武功)
數(shù)據(jù)采集 (數(shù)據(jù)爬蟲)
數(shù)據(jù)過濾 (數(shù)據(jù)敏感詞過濾忠寻,比如一些侮辱性詞語)
數(shù)據(jù)驗證 (表單驗證常用惧浴,比如 手機號驗證、郵箱驗證...)
3奕剃、快速入門
例1:查找一個字符串中是否具有數(shù)字“8”(可以使用indexOf)
var a1 = 'ni shi ge hen shuai de ren';
var a2 = 'ni shi ge bu shuai de ren 12800,.....';
var reg = /8/gi
//1衷旅、 test() 檢測子字符串是否存在,返回boolean值
console.log(reg.test(a1))
/* 結(jié)果false */
console.log(reg.test(a2))
/* 結(jié)果true */
例2:查找一個字符串中是否具有數(shù)字(數(shù)字是從0-9纵朋,可以使用charAt)
var a1 = "xiyangyang";
var a2 = "xiyangyang2";
var reg = /\d/gi
reg.test(a1); /* 結(jié)果false */
reg.test(a2); /* 結(jié)果true */
例3:查找一個字符串中是否具有非數(shù)字
var b1 = "zhongguo";
var b2 = "zhongguonihaoa10-01";
var reg = /\D/i;
reg.test(b1);
/* 結(jié)果true */
reg.test(b2);
/* 結(jié)果true */
二柿顶、正則對象
1、為什么要使用正則對象呢操软?
在實際應(yīng)用中嘁锯,要使用正則表達式必須有一個前提,首先要創(chuàng)建正則對象
2聂薪、創(chuàng)建正則對象
①隱式創(chuàng)建
var 正則對象 = /正則表達式/匹配模式
②直接實例化
var 正則對象 = new RegExp('正則表達式', '匹配模式')
問題:隱式創(chuàng)建與直接實例化有什么區(qū)別呢?
答:兩者之間的功能是完全一致的家乘,都是為了獲得正則對象。但是兩者之間的區(qū)別主要在于語法的不同藏澳。
例:求三位連續(xù)的數(shù)字
隱式創(chuàng)建:
var reg = /\d\d\d/gi;
直接實例化
var reg = new RegExp('\\d\\d\\d');
由以上代碼可知仁锯,兩者功能完全一致,唯一區(qū)別在于語法的不同翔悠,直接實例化RegExp中业崖,正則表達式需要對反斜杠 \進行轉(zhuǎn)義操作
var a = "123abc567cvs";
var reg = new RegExp('\\d\\d\\d','gi');
reg.test(a);
//結(jié)果true
3、匹配模式
基礎(chǔ)語法
var reg = /正則表達式/匹配模式
g:global縮寫蓄愁,代表全局匹配双炕,匹配出所有滿足條件的結(jié)果
i: ignore縮寫,代表忽略大小寫撮抓,匹配時妇斤,會自動忽略字符串的大小
示例代碼
var str = "abcdefg"
var reg = /cde/gi
console.log(reg.test(str))
/*結(jié)果true*/
4、 與正則表達式相關(guān)的幾個方法
① RegExp類下的方法(reg.test或 reg.exec)
test(str):判斷字符串中是否具有指定模式的子字符串,返回結(jié)果是一個布爾類型的值
exec(str):返回字符串中指定模式的子字符串趟济,一次只能獲取一個與之匹配的結(jié)果
示例
<!--一個輸入框和兩個按鈕-->
<!--引入jquery.js 不引入的可寫原生js-->
/*獲取btn1按鈕并綁定點擊事件*/
$("#btn1").onclick = function(){
/*獲取文本框的值*/
let content = $('#content').value;
/*獲取正則對象,規(guī)則三位挨著的數(shù)字*/
let reg = /\d\d\d/gi
/*判斷*/
alert(reg.test(content));
}
/*獲取btn2按鈕并綁定點擊事件*/
$("#btn2").onclick = function(){
/*獲取文本框的值*/
let content = $('#content').value;
/*獲取正則對象,規(guī)則三位挨著的數(shù)字*/
let reg = /\d\d\d/gi
/*輸出匹配到的數(shù)據(jù)*/
alert(reg.exec(content));
}
② String類下的方法(str.方法(reg))
String.search(reg):與indexOf非常類型乱投,返回指定模式的子串在字符串中首次出現(xiàn)的位置。
String.match(reg):以數(shù)組的形式返回指定模式的字符串顷编,可以返回所有的匹配的結(jié)果戚炫。
String.replace(reg, '替換后的字符'):把指定模式的子串進行替換操作。
String.split(reg):以指定模式分割字符串媳纬,返回結(jié)果為數(shù)組双肤。
示例:使用以上方法查找字符串中三個連續(xù)數(shù)字
var str = "abcd345efg188vbncmd255hjak";
var reg = /\d\d\d/gi;
/*String.search(reg) 返回子串首次出現(xiàn)的位置*/
console.log(str.search(reg));/*結(jié)果: 4 */
/*String.match(reg) 返回所有匹配結(jié)果*/
console.log(str.match(reg));/*結(jié)果: ["345", "188", "255"] */
/*String.replace(reg) 返回所有匹配結(jié)果*/
console.log(str.replace(reg, '帥'));/*結(jié)果: abcd帥efg帥vbncmd帥hjak */
/*String.split(reg) 返回所有匹配結(jié)果*/
console.log(str.split(reg));/*結(jié)果: ["abcd", "efg", "vbncmd", "hjak"] */