摘要:嵌套分組的捕獲如果碰到類似我就是陌上寒的嵌套分組,捕獲的順序是什么來(lái)試試我就是陌上寒我就是陌上寒我就是陌上寒我是陌上寒陌上寒規(guī)則是以左括號(hào)出現(xiàn)的順序進(jìn)行捕獲。
原文鏈接
昨天說(shuō)了幾個(gè)RegExp的幾個(gè)實(shí)例屬性
global 標(biāo)示正則表達(dá)式是否指定了全局模式g(只讀)
ignoreCase 標(biāo)示正則表達(dá)式是否指定了不區(qū)分大小寫模式i(只讀)
mutiline 標(biāo)示正則表達(dá)式是否指定了多行模式m(只讀)
lastIndex 如果使用了全局模式,這個(gè)變量保存的是在字符串中嘗試下次的匹配的偏移值,在test()和exec()中會(huì)用到這個(gè)值(可寫)
source 返回創(chuàng)建RegExp對(duì)象實(shí)例時(shí)指定的表達(dá)式文本字符串。(只讀)
雖然有那么多屬性,但是基本用不到,為什么呢?因?yàn)檫@些信息都包含在模式聲明中了:
字面量創(chuàng)建的正則
var reg = /[abc]de/i console.log(reg.global);//=>false console.log(reg.ignoreCase);//=>true console.log(reg.multiline);//=>false console.log(reg.lastIndex);//=>0 console.log(reg.source);//=>[abc]de
通過(guò)RegExp構(gòu)造函數(shù)創(chuàng)建的也是一樣的結(jié)果
var reg2 = new RegExp("[bc]at","i") console.log(reg2.global);//=>false console.log(reg2.ignoreCase);//=>true console.log(reg2.multiline);//=>false console.log(reg2.lastIndex);//=>0 console.log(reg2.source);//=>[abc]dereplace
說(shuō)到正則表達(dá)式,不得不提replace
stringObject.replace(regexp/substr,replacement)
參數(shù)1:可以是字符串,也可以是正則表達(dá)式
參數(shù)2:可以是字符串,也可以是函數(shù)。如果它是字符串,那么每個(gè)匹配都將由字符串替換。但是 replacement 中的 $ 字符具有特定的含義。如下表所示,它說(shuō)明從模式匹配得到的字符串將用于替換。
返回一個(gè)新的字符串,是用 參數(shù)2 替換了 參數(shù)1 的第一次匹配或所有匹配之后得到的。
$1、$2、...、$99 與 regexp 中的第 1 到第 99 個(gè)子表達(dá)式相匹配的文本。
$& 與 regexp 相匹配的子串。
$` 位于匹配子串左側(cè)的文本。
$" 位于匹配子串右側(cè)的文本。
$$ 直接量符號(hào)。
replace例一:匹配一次,區(qū)分大小寫
var aStr = "Hello 陌上寒!" var bStr = aStr.replace("陌上寒", "正則表達(dá)式") console.log( bStr)//=>Hello 正則表達(dá)式!
replace例二:全局匹配
var cStr =`你好 陌上寒! 我是陌上寒,我們一起來(lái)交流討論前端,每天更新,歡迎關(guān)注` var dStr = cStr.replace(/陌上寒/g, "moshanghan") console.log(dStr)//=>你好 moshanghan! //=>我是moshanghan,我們一起來(lái)交流討論前端,每天更新,歡迎關(guān)注
replace例三:忽略大小寫,匹配一次
var cStr ="我是 Moshanghan! moshanghan是我" var dStr = cStr.replace(/moshanghan/i, "陌上寒") console.log(dStr)//=>我是 陌上寒! moshanghan是我
replace例四:忽略大小寫,全局匹配
var cStr ="我是 Moshanghan! moshanghan是我" var dStr = cStr.replace(/moshanghan/ig, "陌上寒") console.log(dStr)//=>我是 陌上寒! 陌上寒是我
加點(diǎn)難度
replace例五:hello, moshanghan轉(zhuǎn)換為moshanghan hello
以下的輸出是相同的
var name = "hello, moshanghan"; var a = name.replace(/(w+)s*,s*(w+)/, "$2 $1"); console.log(a);//=>moshanghan hello var b = name.replace(/(w+)s*, (w+)s*/, "$2 $1"); console.log(b);//=>moshanghan hello var c = name.replace(/(w+), (w+)/, "$2 $1"); console.log(c);//=>moshanghan hello var d = name.replace(/(w*), (w*)/, "$2 $1"); console.log(d);//=>moshanghan hello
replace例六:
var name = `"a", "b"," dd"`; var aa = name.replace(/"([^"]*)"/, ""$1""); console.log(aa); //=>"a", "b"," dd" console.log(/"([^"]*)"/g.test(name));
replace例七:
var name = "aaa bbb ccc"; var uw = name.replace(/w+/g, function (word) { return word.substring(0, 1).toUpperCase() + word.substring(1); }); console.log(uw); //Aaa Bbb Ccc
要理解上面的,有幾個(gè)關(guān)于正則的概念需要知道
分組下面的正則表達(dá)式可以匹配kidkidkid:
var b?=/kidkidkid/ console.log(b.test("kidkidkid")); //=>true
而另一種更優(yōu)雅的寫法是:
var b?=/(kid){3}/ console.log(b.test("kidkidkid")); //=>true
這里由圓括號(hào)包裹的一個(gè)小整體稱為分組。
候選一個(gè)分組中,可以有多個(gè)候選表達(dá)式,用|分隔:
var reg = /I love (him|her|it)/; console.log(reg.test("I love him"));//=>true console.log(reg.test("I love her"));//=>true console.log(reg.test("I love it"));//=>true console.log(reg.test("I love them"));//=>false捕獲與引用
被正則表達(dá)式匹配(捕獲)到的字符串會(huì)被暫存起來(lái)。其中,由分組捕獲的串會(huì)從1開始編號(hào),于是我們可以引用這些串
var reg = /(d{4})-(d{2})-(d{2})/ var date = "2010-04-12" reg.test(date) console.log(RegExp.$1);//=>2010 console.log(RegExp.$2);//=>04 console.log(RegExp.$3);//=>12
$1引用了第一個(gè)被捕獲的串,$2是第二個(gè),依次類推。
嵌套分組的捕獲如果碰到類似/((我) 就 (是 (陌上寒)))/的嵌套分組,捕獲的順序是什么?來(lái)試試:
var reg = /((我) 就 (是 (陌上寒)))/ var str = "我 就 是 陌上寒" reg.test( str ) // true console.log(RegExp.$1);//=>我 就 是 陌上寒 console.log(RegExp.$2);//=>我 console.log(RegExp.$3);//=>是 陌上寒 console.log(RegExp.$4);//=>陌上寒
規(guī)則是以左括號(hào)“(”出現(xiàn)的順序進(jìn)行捕獲。
昨日回顧
從今天起開啟對(duì)正則表達(dá)式的學(xué)習(xí)
參考鏈接
JavaScript正則表達(dá)式的分組匹配詳解
JavaScript replace() 方法
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/99478.html
摘要:同樣的你也可以測(cè)試第四次執(zhí)行的時(shí)候就會(huì)是了,需要知道的是,只有在全局檢索時(shí)才會(huì)生效,否則的話只會(huì)返回哦方法二使用正則表達(dá)式模式對(duì)字符串執(zhí)行搜索,并將更新全局對(duì)象的屬性以反映匹配結(jié)果。 之前寫正則都是各種上網(wǎng)搜索,還是沒有系統(tǒng)的學(xué)習(xí)過(guò)正則表達(dá)式的用法,今天稍稍研究了一下下,感覺還是收獲頗豐的,分享給各位,希望對(duì)于你們有所幫助~~ 修飾符 g --全局匹配 i --不區(qū)分大小寫,默認(rèn)...
摘要:因?yàn)樽鲆坏李},題目如下其中一個(gè)解答,引起了我對(duì)正則的研究興趣,解答如下我對(duì)正則表達(dá)式中的正向肯定預(yù)查一直不帶明白,所以趁這個(gè)機(jī)會(huì)研究一下。與此同時(shí),對(duì)象的更新為下一次開始匹配的索引值。 因?yàn)樽鲆坏李}(http://www.codewars.com/kata/insert-dashes/solutions/javascript),題目如下: Write a function insert...
摘要:使用構(gòu)造器時(shí),需要將模式書寫成普通的字符串,因此反斜杠的使用規(guī)則與往常相同。構(gòu)造器的后四個(gè)參數(shù)小時(shí)分鐘秒毫秒是可選的,如果用戶沒有指定這些參數(shù),則參數(shù)的值默認(rèn)為。 來(lái)源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Regular Expressions 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript...
摘要:正則表達(dá)式是由普通字符例如字符到以及特殊字符稱為元字符組成的文字模式。方法參數(shù)一個(gè)正則表達(dá)式對(duì)象。如果正則表達(dá)式?jīng)]有標(biāo)志,則會(huì)返回和相同的結(jié)果。其被視為一整個(gè)字符串,而不是一個(gè)正則表達(dá)式。 正則表達(dá)式 正則表達(dá)式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為元字符)。正則表達(dá)式使用單個(gè)字符串來(lái)描述、匹配一系列匹配某個(gè)...
摘要:非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。 導(dǎo)讀 你有沒有在搜索文本的時(shí)候絞盡腦汁, 試了一個(gè)又一個(gè)表達(dá)式, 還是不行. 你有沒有在表單驗(yàn)證的時(shí)候, 只是做做樣子(只要不為空就好), 然后燒香拜佛, 虔誠(chéng)祈禱, 千萬(wàn)不要出錯(cuò). 你有沒有在使用sed 和 grep 命令的時(shí)候, 感覺莫名其妙, 明明應(yīng)該支持的元字符, 卻就是匹配不到. 甚至,...
閱讀 1071·2023-04-25 14:35
閱讀 2832·2021-11-16 11:45
閱讀 3423·2021-09-04 16:48
閱讀 2187·2021-08-10 09:43
閱讀 534·2019-08-30 13:17
閱讀 1627·2019-08-29 13:27
閱讀 892·2019-08-26 13:58
閱讀 2158·2019-08-26 13:48