Javascript的正則表達(dá)式是前端中比較重要的部分,正則表達(dá)式主要用于字符串處理,表單驗(yàn)證等場合,實(shí)用高效,文章主要對JavaScript中的正則的學(xué)習(xí)與總結(jié)
正則表達(dá)式的定義正則表達(dá)式:是一個(gè)描述字符模式的對象,JavaScrip中正則表達(dá)式用RegExp對象表示,可以使用RegExp構(gòu)造函數(shù)來創(chuàng)建正則對象
正則表達(dá)式的創(chuàng)建1.字面量創(chuàng)建 var reg = /[a-z]/; 2.構(gòu)造函數(shù)的創(chuàng)建 var reg = new RegExp("[a-z]");直接量字符 字符類
將直接量字符放入方括號內(nèi)就組成了字符類
console.log(/[abc]/.test("a"));//true console.log(/[abc]/.test("b"));//true console.log(/[abc]/.test("c"));//true否定類字符
定義否定類字符時(shí),將一個(gè)“^”符號作為方括號內(nèi)的第一個(gè)字符
console.log(/[^abc]/.test("a"));//false console.log(/[^abc]/.test("b"));//false console.log(/[^abc]/.test("1111"));//true范圍字符
利用 "-" 表示范圍字符,可以匹配某個(gè)范圍內(nèi)的字符
console.log(/[0-9]/.test("5"));//true console.log(/[0-9]/.test("a"));//false console.log(/[a-z]/.test("b"));//true console.log(/[a-z]/.test("B"));//false console.log(/[A-Z]/.test("B"));//true console.log(/[A-Z]/.test("b"));//false預(yù)定義的字符類 量詞
在我們上面認(rèn)識到的正則語法當(dāng)中,我們可以把兩位字母描述為/ww/,三位字母描述為/www/,但如果要描述很多位字母怎么辦?描述為/w....../天吶! 這是要逼死我們的節(jié)奏啊!因此量詞就是處理這些數(shù)量關(guān)系操作的它用來修飾前一位字符出現(xiàn)的次數(shù)
console.log(/d{2,4}/.test("111"));//true console.log(/w{3}d?/.test("aaa"));//true console.log(/w{3}d?/.test("aaa1"));//true
注意:在使用 " " 和 " ? " 時(shí) 由于這些字符有可能匹配0個(gè)字符,因此他們允許什么都不匹配,例如,正則表達(dá)式 /a/與"bbbb"匹配,因?yàn)樗?個(gè)a
貪婪量詞我們上面列出的量詞都是貪婪量詞,
它會盡可能多地匹配,默認(rèn)先匹配整個(gè)字符串,然后不匹配在縮小范圍繼續(xù)匹配
非貪婪量詞在上面列出的量詞后面加個(gè)問號(" ?? " " +? ")
總是從第一個(gè)字符開始向后擴(kuò)展范圍匹配
//非貪婪模式 console.log(/a*?bb/g.exec("abbaabbaaabbb")); //abb //貪婪模式 var pattern = /a*bb/g; var text = "aabbaabbaaabbbaabbb"; var result; while((result = pattern.exec(text))!=null){ console.log(result); //aabb aabb aaabb aabb }選擇,分組與引用
選擇
字符 " | " 用于分隔供選擇的字符
console.log(/ab|cd|ef/.test("ab"));//true console.log(/ab|cd|ef/.test("cd"));//true console.log(/ab|cd|ef/.test("ef"));//true
分組
"()" 用于分組,把多帶帶的項(xiàng)組合成子表達(dá)式
console.log(/java(script)?/.test("java"));//true console.log(/java(script)?/.test("javascript"));//true
引用
引用包含 匹配模式引用,匹配的內(nèi)容引用
" "后面加數(shù)字 用于模式的引用
" $ " 后面加數(shù)據(jù) 用于匹配的內(nèi)容引用
console.log(/(d)([a-z])1/.test("1a1"));//true console.log(RegExp.$1);//1 console.log(RegExp.$2);//a
只組合并不創(chuàng)建引用
并不是所有的分組都能創(chuàng)建引用," (?: ) "符號只用來分組而不創(chuàng)建引用,如下: 1 不是 引用的 d 而是 [a-z]
console.log(/(?:d)([a-z])1/.test("1aa"));//true console.log(/(?:d)([a-z])1/.test("1a1"));//false位置字符
console.log(/^java$/.test("java"));//true console.log(/^java$/.test("javascript"));//false console.log(/^java$/.test("cjavascript"));//false console.log(/java(?=script)/.test("javascript"));//true console.log(/java(?=script)/.test("javaislan"));//false console.log(/java(?!script)/.test("javascript"));//false console.log(/java(?!script)/.test("javaislan"));//true修飾符
正則表達(dá)式的修飾符是放在 "/" 之外的,JavaScript 支持三個(gè)修飾符
console.log(/JAVA/i.test("java"));//true支持正則的String對象方法
search():
用于檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串,并返回第一個(gè)與之匹配的子字符串的位置
console.log("JAVA is not javascript".search(/java/i));//0
注意:search()方法不支持全局檢索,因?yàn)樗麜雎哉齽t表達(dá)式參數(shù)中的修飾符g
replace():
用于檢索與替換操作,接收兩個(gè)參數(shù),第一個(gè)是正則表達(dá)式,第二個(gè)是要進(jìn)行替換的字符串,該方法可以全局匹配
console.log("JAVA is not JAVAscript".replace(/java/i, "java"));//java is not JAVAscript console.log("JAVA is not JAVAscript".replace(/java/ig, "java"));//java is not javascript
回憶上面我們所提到的正則的引用 $加數(shù)字可以保存分組的匹配的內(nèi)容,這里我們就可以用到
console.log("JAVA is not javascript".replace(/(JAVA)/, ""$1""));//"JAVA" is not javascrip
match():
用于檢索字符串中與正則表達(dá)式匹配的結(jié)果,參數(shù)必須是正則表達(dá)式,返回一個(gè)由匹配結(jié)果組成的數(shù)組
在match方法中如果正則表達(dá)式設(shè)置修飾符g,則返回的數(shù)組是字符串中所有匹配的結(jié)果
console.log("JAVA is not JAVAscript".match(/java/ig));//["JAVA", "JAVA"]
如果沒有設(shè)置g,match()方法不會進(jìn)行全局檢索,只會檢索第一個(gè)匹配,但它也是返回一個(gè)數(shù)組,此時(shí)數(shù)組的第一個(gè)元素就是匹配的結(jié)果,剩下的元素為圓括號包含的子表達(dá)式匹配的結(jié)果
console.log("1a2b".match(/(d)([a-z])/)); //["1a", "1", "a"]
split():
用于把一個(gè)字符串分割成數(shù)組,參數(shù)為字符串或這個(gè)正則表達(dá)式
console.log("a,b,c,d".split(","));//["a", "b", "c", "d"] console.log("a, b, c, d".split(/,s*/));//["a", "b", "c", "d"]JavaScript中的 RegExp 對象
RegExp() 構(gòu)造函數(shù)用于創(chuàng)建新的RegExp 對象。構(gòu)造函數(shù)接受兩個(gè)參數(shù),第一個(gè)是表達(dá)式的主體部分,第二個(gè)是表達(dá)式的修飾符
//在構(gòu)造函數(shù)中必須用 字符作為前綴進(jìn)行轉(zhuǎn)義 var regExp = new RegExp("w*", "g");RegExp 對象的屬性
RegExp 對象包含5個(gè)屬性
exec():
用于檢索字符串中正則表達(dá)式的匹配,如果有匹配則返回該匹配的值,否則返回null
console.log(/java/i.exec("javaScript is not java"));//["java", index: 0, input: "javaScript is not java"] console.log(/css/i.exec("javaScript is not java"));//null console.log(/java/ig.exec("javaScript is not java"));//["java", index: 0, input: "javaScript is not java"]
上述代碼可以看出exec() 只會返回一次匹配結(jié)果,在全局匹配模式下,exec方法會設(shè)置lastIndex 屬性的值,exec()的下次檢索會從lastIndex屬性指示的字符處開始檢索
var pattern = /java/ig; var text = "javaScript is not JAVA"; var result; result = pattern.exec(text); console.log(result);//["java", index: 0, input: "javaScript is not java"] console.log(pattern.lastIndex);//4 result = pattern.exec(text); console.log(result);//["JAVA", index: 18, input: "javaScript is not JAVA"] console.log(pattern.lastIndex);//22
通常我們在用exec()檢索字符串時(shí),可以利用while循環(huán)
var pattern = /java/ig; var text = "javaScript is not JAVA"; var result; while((result = pattern.exec(text))!==null){ console.log(result); }
test():
用于檢索字符串中是否匹配某個(gè)表達(dá)式,如果匹配返回true,否則返回false
console.log(/java/.test("javascript"));//true console.log(/java/.test("script"));//true
關(guān)注微信公眾號:六小登登。領(lǐng)取全套學(xué)習(xí)資源
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89243.html
摘要:選擇分組和引用正則表達(dá)式的語法還包括指定選擇項(xiàng)子表達(dá)式分組和引用前一子表達(dá)式的特殊字符。帶圓括號的表達(dá)式的另一個(gè)用途是允許在同一正則表達(dá)式的后部引用前面的子表達(dá)式。 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對象。JavaScript的 RegExp類 表示正則表達(dá)式,String和RegExp都定義了方法,后者使用正則表達(dá)式進(jìn) 行強(qiáng)大的模式匹配和文本檢索與...
摘要:正則表達(dá)式的意義中的正則表達(dá)式使用表示,可以使用構(gòu)造函數(shù)來創(chuàng)建對象,不過對象更多的是通過一種特殊的直接量語法來創(chuàng)建。用構(gòu)造函數(shù)也可以定義一個(gè)與之等價(jià)的正則表達(dá)式,代碼如下正則表達(dá)式的模式規(guī)則是由一個(gè)字符序列組成的。 正則表達(dá)式的模式匹配 正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對象。javascript的RegExp對象表示正則表達(dá)式,String和Reg...
摘要:構(gòu)造函數(shù)可以有兩個(gè)字符串參數(shù),第一個(gè)參數(shù)包含正則表達(dá)式的主體部分。只讀的布爾值,說明這個(gè)正則表達(dá)式是否帶有修飾符。中正則的擴(kuò)展構(gòu)造函數(shù)在中,只能接受字符串作為參數(shù),允許其直接接受正則表達(dá)式作為參數(shù)。 上文傳送門:初探正則表達(dá)式 正則表達(dá)式是一個(gè)描述字符模式的對象,JavaScript 的 RegExp 類表示正則表達(dá)式,String 和 RegExp 都定義了方法,后者使用正則表達(dá)式進(jìn)...
摘要:本文內(nèi)容共正則表達(dá)式火拼系列正則表達(dá)式回溯法原理學(xué)習(xí)正則表達(dá)式,是需要懂點(diǎn)兒匹配原理的。正則表達(dá)式迷你書問世了讓幫你生成和解析參數(shù)字符串最全正則表達(dá)式總結(jié)驗(yàn)證號手機(jī)號中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對字符串執(zhí)行模式匹配。 JS 的正則表達(dá)式 正則表達(dá)式 一種幾乎可以在所有的程序設(shè)計(jì)語言里和所有的計(jì)算機(jī)平臺上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...
摘要:正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)中的字符串模式返回。其中,表示匹配項(xiàng)在字符串中的位置,而表示應(yīng)用正則表達(dá)式的字符串。下面列出了正則表達(dá)式所不支持的特性。關(guān)卡按要求完成下列常用的正則表達(dá)式。 由于本課程的核心是 JavaScript,所以本文著重講解了「正則表達(dá)式」在 JavaScript 中的用法,并未深入「正則表達(dá)式」的具體細(xì)節(jié)。如果您尚不了解「正則表達(dá)式」,強(qiáng)...
閱讀 881·2023-04-26 03:03
閱讀 2206·2021-10-12 10:12
閱讀 1201·2021-09-24 09:48
閱讀 1645·2021-09-22 15:25
閱讀 3332·2021-09-22 15:15
閱讀 914·2019-08-29 16:21
閱讀 1063·2019-08-28 18:00
閱讀 3423·2019-08-26 13:44