JS中的正規表示式 1

2021-08-30 06:01:11 字數 3139 閱讀 8963

量詞(下表量詞單個出現時皆是貪婪量詞)

**  描述

*     匹配前面的子表示式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等價於。

+     匹配前面的子表示式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 。

?     匹配前面的子表示式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價於 。

n 是乙個非負整數。匹配確定的 n 次。例如,'o' 不能匹配 "bob" 中的 'o',但是能匹配 "food" 中的兩個 o。

n 是乙個非負整數。至少匹配n 次。例如,'o' 不能匹配 "bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o' 等價於 'o+'。'o' 則等價於 'o*'。

m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。劉, "o" 將匹配 "fooooood" 中的前三個 o。'o' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。

貪婪量詞與惰性量詞

•用貪婪量詞進行匹配時,它首先會將整會字串當成乙個匹配,如果匹配的話就退出,如果不匹配,就截去最後乙個字元進行匹配,如果不匹配,繼續將最後乙個字元截去進行匹配,直到有匹配為止。直到現在我們遇到的量詞都是貪婪量詞

•用貪婪量詞進行匹配時,它首先將第乙個字元當成乙個匹配,如果成功則退出,如果失敗,則測試前兩個字元,依些增加,直到遇到合適的匹配為止

惰性量詞僅僅在貪婪量詞後面加個"?"而已,如"a+"是貪婪匹配的,"a+?"則是惰性的

var str = "abc";

var re = /\w+/;//將匹配abc

re = /\w+?/;//將匹配a

多行模式

var re = /[a-z]$/;

var str = "ab\ncdef";

alert(str.replace(re,"#"));//ab\ncde#

re =/[a-z]$/m;

alert(str.replace(re,"#"));//a#\ncde#

分組與非捕獲性分組

re = /abc/;//將匹配abcc

re = /(abc)/;//將匹配abcabc

//上面的分組都是捕獲性分組

str = "abcabc ###";

arr = re.exec(str);

alert(arr[1]);//abc

//非捕獲性分組 (?:)

re = /(?:abc)/;

arr = re.exec(str);

alert(arr[1]);//undefined

候選(也就是所說的「或」)

re = /^a|bc$/;//將匹配開始位置的a或結束位置的bc

str ="add";

alert(re.test(str));//true

re = /^(a|bc)$/;//將匹配a或bc

str ="bc";

alert(re.test(str));//true

當包含分組的正規表示式進行過test,match,search這些方法之後,每個分組都被放在乙個特殊的地方以備將來使用,這些儲存是分組中的特殊值,我們稱之為反向引用

var re = /(a?(b?(c?)))/;

/*上面的正規表示式將依次產生三個分組

(a?(b?(c?))) 最外面的

(b?(c?))

(c?)*/

str = "abc";

re.test(str);//反向引用被儲存在regexp物件的靜態屬性$1—$9中

alert(regexp.$1+"\n"+regexp.$2+"\n"+regexp.$3);

//反向引用也可以在正規表示式中使用\1 ,\2...這類的形式使用

re = /\d+(\d)\d+\1\d+/;

str = "2008-1-1";

alert(re.test(str));//true

str = "2008-4_3";

alert(re.test(str));//false

使用反向引用可以要求字串中某幾個位置上的字元必須相同.另外,在replace這類方法中可用特殊字串行來表示反向引用

re = /(\d)\s(\d)/;

str = "1234 5678";

alert(str.replace(re,"$2 $1"));//在這個裡面$1表示第乙個分組1234,$2則表示5678

其它——〉正向前瞻,用來捕獲出現在特定字元之前的字元,只有當字元後面跟著某個特定字元才去捕獲它。與正向前瞻對應的有負向前瞻,它用匹配只有當字元後面不跟著某個特定字元時才去匹配它。在執行前瞻和負向前瞻之類的運算時,正規表示式引擎會留意字串後面的部分,然而卻不移動index

//正向前瞻

re = /([a-z]+(?=\d))/i;

//我們要匹配後面跟乙個數字的單詞,然後將單詞返回,而不要返回數字

str = "abc every1 abc";

alert(re.test(str));//true

alert(regexp.$1);//every

alert(re.lastindex);//使用前瞻的好處是,前瞻的內容(?=\d)並不會當成一次匹配,下次匹配仍從它開始

//負向前瞻(?!)

re = /([a-z](?!\d))/;i

//將匹配後面不包含數字的字母,並且不會返回(?!\d)中的內容

str = "abc1 one";

alert(re.test(str));

alert(regexp.$1);//one

構建乙個驗證電子郵箱位址有效性的正規表示式。電子郵箱位址有效性要求(我們姑且這樣定義):使用者名稱只能包含字母數字以及下劃線,最少一位,最多 25位,使用者名稱後面緊跟@,後面是網域名稱,網域名稱名稱要求只能包含字母數字和減號(-),並且不能以減號開頭或結尾,然後後面是網域名稱字尾(可以有多個),網域名稱字尾必須是點號連上2-4位英文本母

var re = /^\w(?:@(?!-))(?:(?:[a-z0-9-]*)(?:[a-z0-9](?!-))(?:\.(?!-)))+[a-z]$/;

js 正規表示式(1)

正規表示式是前端面試中的高頻考點,但是正則又像一塊裹腳布一樣又臭又長。最近看一些部落格找到一些規律,分享在這裡。正則是匹配模式,要麼匹配字串,要麼匹配位置。1.長度不定 使用量詞 abc 表示在b在a和c 之間出現有2 5次不等。1.字元不定 使用字元組 123 ab 123 c 表示在b和之間可能...

js正規表示式1

知識 阮一峰老師的教程 doctype html html lang en head meta charset utf 8 title title title head body body script 正則物件的屬性和方法 正則物件的屬性分成兩類。一類是修飾符相關,返回乙個布林值,表示對應的修飾符...

js中的正規表示式

d 非負整數 正整數 0 0 9 1 9 0 9 正整數 d 0 非正整數 負整數 0 0 9 1 9 0 9 負整數 d 整數 d d 非負浮點數 正浮點數 0 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 正浮點數 d d 0 0 非正浮點數 負浮點數 ...