量詞(下表量詞單個出現時皆是貪婪量詞)
** 描述
* 匹配前面的子表示式零次或多次。例如,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/;//將匹配abccre = /(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或結束位置的bcstr ="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)/;其它——〉正向前瞻,用來捕獲出現在特定字元之前的字元,只有當字元後面跟著某個特定字元才去捕獲它。與正向前瞻對應的有負向前瞻,它用匹配只有當字元後面不跟著某個特定字元時才去匹配它。在執行前瞻和負向前瞻之類的運算時,正規表示式引擎會留意字串後面的部分,然而卻不移動indexstr = "1234 5678";
alert(str.replace(re,"$2 $1"));//在這個裡面$1表示第乙個分組1234,$2則表示5678
//正向前瞻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 非正浮點數 負浮點數 ...