摘要:接下來再看可以看到結果變成了,這是因為表達式匹配的內容可以用來表示忽略分組非捕獲分組再來一個例子再來個時間轉化的例子向前查找此東西是個位置即和。其中是一個子正則表達式。
重復的貪婪性
{n,m} {n,} {n} ? + *
?表示匹配0次或1次,(最多匹配1次);
+表示匹配1次或多次,(最少匹配1次);
*表示匹配0次或多次,(匹配任意次);
{m,n}表示匹配m到n次,(最少m次,最多n次);
舉例:
console.log("@123@456@789".match(/d{1,2}/g)) // ==> ["12", "3", "45", "6", "78", "9"]
{1,2}優先匹配2次(貪婪),還可以匹配1次,可以看到上面的結果為["12", "3", "45", "6", "78", "9"];
非貪婪,在量詞后面加一個?即可;
console.log("@123@456@789".match(/d{1,2}?/g)) // ==> ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
表示匹配到1次了就不再匹配了(非貪婪)。
分組假設有這樣不同格式的日期(2016-10-15、2016/10/15、2016.10.15),如果想要提取具體的年月日,可以這么寫:
console.log("2016-10-15".match(/d{4}[/-.]d{2}[/-.]d{2}/)) // ==> ["2016-10-15"]
上面是沒有添加分組時候的,此時,可以給它添加分組:
console.log("2015-10-15".match(/(d{4})[/-.](d{2})[/-.](d{2})/)) // ==> ["2016-10-15", "2016", "10", "15"]
可以看到輸出的結果是一個array,里面的年月日就已經被提取出來了。接下來再看:
console.log("2015-10-15".replace(/(d{4})[/-.](d{2})[/-.](d{2})/g,"$3-$2-$1")) // ==> "15-10-2016"
可以看到結果變成了:15-10-2016,這是因為表達式匹配的內容可以用$1,$2,...來表示
忽略分組(非捕獲分組)
var reg = /(?:d{4})(-|.|/)d{2}1d{2}/; console.log(reg.test("2016-10-15")); // ==>true console.log(reg.test("2016.10.15")); // ==>true console.log(reg.test("2016/10/15")); // ==>true console.log(reg.test("2016-10/15")); // ==>false
再來一個例子:
console.log("1-2-3-4".replace(/(d)/g,"x")); // ==> x-x-x-x console.log("1-2-3-4".replace(/(-d)/g,"x")); // ==> 1xxx console.log("1-2-3-4".replace(/-(d)/g,"x")); // ==> 1xxx console.log("1-2-3-4".replace(/(-d)/g,"0$1")); // ==> 10-20-30-4 console.log("1-2-3-4".replace(/-(d)/g,"0$1")); // ==> 1020304 console.log("1-2-3-4".match(/(-d)/g)); // ==> ["-2", "-3", "-4"] console.log("1-2-3-4".match(/-(d)/g)); // ==> ["-2", "-3", "-4"] console.log(RegExp.$1); // ==> 4
再來個時間轉化的例子:
var date="2014-12-30 12:30:20"; console.log(date.replace(/(d{4})-(d{2})-(d{2})/g,"$2-$3-$1")); // ==> "12-30-2014 12:30:20" console.log(date.replace(/(d{4})-(d{2})-(d{2})s[w+:]{8}/g,"$2-$3-$1")) // ==> "12-30-2014"向前查找 (此東西是個位置!)
即(?=p)和(?!p)。其中p是一個子正則表達式。關于錨字符匹配的問題,在ES5中總共有6個。
^ $ B (?=p) (?!p)
(?=3)表示啥意思呢?表示3前面的位置,見例子:
console.log("a1b2c3d4".replace(/(?=3)/g,"x")); // ==> a1b2cx3d4 console.log("a1b2c3d4".replace(/(?=d)/g,"x")); // ==> ax1bx2cx3dx4
那么(?!...)的概念也好理解了,表示取非的,見例子:
console.log("a1b2c3d4".replace(/(?!3)/g,"x")); // ==> xax1xbx2xc3xdx4x console.log("a1b2c3d4".replace(/(?!d)/g,"x")); // ==> xa1xb2xc3xd4x
注意(?!d)表示的意思不是“非數字前面的位置”,而是所有位置中扣掉數字前面位置。
再來看一個例子:
假如”a1b2c3d4“這個字符串,我要匹配b或c前面的數字,怎么做呢?
console.log("a1b2c3d4".replace(/d(?=[bc])/g,"x")); // ==> axbxc3d4 console.log("a1b2c3d4".match(/d(?=[bc])/g)); // ==> ["1", "2"]
再來看一個:假如有這樣一個字符串"a1a2a3a4a5",我要匹配所有的a但不包括3前面的a,怎么做呢?見下面:
console.log("a1a2a3a4a5".replace(/a(?!3)/g,"x")); // ==> x1x2a3x4x5
最后:來個小例子結束本篇文章:(利用正則來獲取dom的class)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89645.html
摘要:忍者級別的函數操作對于什么是匿名函數,這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數是一個很重要且具有邏輯性的特性。通常,匿名函數的使用情況是創建一個供以后使用的函數。 JS 中的遞歸 遞歸, 遞歸基礎, 斐波那契數列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執行機制 本文的目的就是要保證你徹底弄懂javascript的執行機制,如果...
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。異步編程入門的全稱是前端經典面試題從輸入到頁面加載發生了什么這是一篇開發的科普類文章,涉及到優化等多個方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結思考,循序漸進的理解 TypeScript。 網絡基礎知識之 HTTP 協議 詳細介紹 HTT...
閱讀 844·2023-04-25 21:21
閱讀 3226·2021-11-24 09:39
閱讀 3067·2021-09-02 15:41
閱讀 1995·2021-08-26 14:13
閱讀 1827·2019-08-30 11:18
閱讀 2768·2019-08-29 16:25
閱讀 507·2019-08-28 18:27
閱讀 1580·2019-08-28 18:17