Javascript正規表示式難點 重點

2021-09-14 05:54:46 字數 3243 閱讀 5324

?   +   *
舉例:

console.log("@123@456@789".match(/\d/g))

// ==> ["12", "3", "45", "6", "78", "9"]

優先匹配2次(貪婪),還可以匹配1次,可以看到上面的結果為["12", "3", "45", "6", "78", "9"];

非貪婪,在量詞後面加乙個?即可;

console.log("@123@456@789".match(/\d?/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[\/\-\.]\d[\/\-\.]\d/))

// ==> ["2016-10-15"]

上面是沒有新增分組時候的,此時,可以給它新增分組:

console.log("2015-10-15".match(/(\d)[\/\-\.](\d)[\/\-\.](\d)/))

// ==> ["2016-10-15", "2016", "10", "15"]

可以看到輸出的結果是乙個array,裡面的年月日就已經被提取出來了。接下來再看:

console.log("2015-10-15".replace(/(\d)[\/\-\.](\d)[\/\-\.](\d)/g,"$3-$2-$1"))

// ==> "15-10-2016"

可以看到結果變成了:15-10-2016,這是因為表示式匹配的內容可以用$1,$2,...來表示

忽略分組(非捕獲分組)

var reg = /(?:\d)(\-|\.|\/)\d\1\d/;

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"));

// ==> 1***

console.log("1-2-3-4".replace(/-(\d)/g,"x"));

// ==> 1***

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)-(\d)-(\d)/g,"$2-$3-$1"));

// ==> "12-30-2014 12:30:20"

console.log(date.replace(/(\d)-(\d)-(\d)\s[\w+\:]/g,"$2-$3-$1"))

// ==> "12-30-2014"

即(?=p)和(?!p)。其中p是乙個子正規表示式。關於錨字元匹配的問題,在es5中總共有6個。

^ $ \b \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)

Javascript正規表示式

這段時間學習js,正好遇到了正規表示式。下面通過使用例項介紹一下正規表示式。正規表示式,又稱正規表示法 常規表示法 英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式使用單個字串來描述 匹配一系列符合某個句法規則的字串。在很多文字...

JavaScript 正規表示式

一 什麼是正規表示式 正規表示式 regular expression 是乙個描述字元模式的物件。測試正規表示式 regexp 物件包含兩個方法 test 和exec 功能基本相似,用於測試字串匹配。test 方法在字串中查詢是否存在指定的正規表示式並返回布林值,如果存在則返回true,不存 在則返...

javascript 正規表示式

正規表示式 regexp物件 主要用於表單驗證 1 建立正規表示式 1 var ret pattern pattern是內容,可以是正規表示式的內容,可以是字元或是其他的內容 2 var rag new regexp pattern 括號內可以是雙引號或者單引號 2 正規表示式的exec方法 reg...