Javascript高级程序设计——9.正则表达式(1)
1、正則表達(dá)式
(1)定義:描述字符模式的對(duì)象
ECMAScript的RegExp類表示正則表達(dá)式
(2)作用:驗(yàn)證客戶端的輸入函數(shù),即在用戶填寫完表單單擊按鈕后,表單被發(fā)送到服務(wù)器,在服務(wù)器端通 ? ? ??常用php,asp.net語(yǔ)言對(duì)其進(jìn)行進(jìn)一步的驗(yàn)證。
2、創(chuàng)建正則表達(dá)式(2種)
(1)new關(guān)鍵字
(2)采用字面量方式(打印出來(lái)的為字面量)
var box=new RegExp('Box'); //第一個(gè)參數(shù)是模式字符串; alert(box); //結(jié)果——"/Box/" //兩個(gè)反斜杠就是正則表達(dá)式字面量表示方法;var box=new RegExp('Box','gi'); //第二個(gè)參數(shù)為可選; alert(box);
(3)模式修飾符(可選參數(shù))
a、i——忽略大小寫
b、g——全局匹配
c、m——多行匹配
var box='/Box/'; alert(box);
3、測(cè)試正則表達(dá)式
A、RegExp
2種:test()/exec()
結(jié)果——均返回布爾值true、false
(1)test():用于匹配字符串
var pattern=new RegExp('Box'); //模式; var str='box'; alert(pattern.test(str)); 結(jié)果:false,由于大小寫不一致
var pattern=new RegExp('Box','i'); //不區(qū)分大小寫; var str='box'; alert(pattern.test(str)); 結(jié)果:true,一句話匹配
var pattern=/Box/i; //使用字面量方式 var str='box'; alert(pattern.test(str)); 結(jié)果:true
(2)exec():用于匹配數(shù)組
(若匹配到,則返回?cái)?shù)組;若沒(méi)匹配到,返回null)
var pattern=/Box/i; //使用字面量方式 var str='sss'; alert(pattern.test(str)); 結(jié)果:如果沒(méi)匹配到,返回null
B、String對(duì)象
4種:match()——返回pattern中子串或null
? ? ?replace()——用新元素替換舊元素
? ? ?search()——返回字符串中開(kāi)始的位置
? ? ?split()——返回字符串按指定pattern拆分的數(shù)組
(1)match()獲取數(shù)組
a、ig:全局
b、i:不是全局
var pattern=/Box/i; //沒(méi)有開(kāi)啟全局搜索; var str='This is a Box!This is a Box!';alert(str.match(pattern)); //匹配到第一個(gè)字符串返回?cái)?shù)組;
(2)search查找匹配數(shù)組
var pattern=/xox/i; //沒(méi)有開(kāi)啟全局搜索; var str='This is a Box!This is a Box!';alert(str.search(pattern)); //找不到匹配,返回-1;
(3)replace替換數(shù)組
var pattern=/Box/i; //沒(méi)有開(kāi)啟全局搜索; var str='This is a Box!This is a Box!';alert(str.replace(pattern,'Tom')); //返回替換的字符串,只替換了第一個(gè);
var pattern=/Box/ig; //全局搜索; var str='This is a Box!This is a Box!'; alert(str.replace(pattern,'Tom')); //返回替換的字符串,替換了兩個(gè);
(4)split表示拆分?jǐn)?shù)組
4、RegExp屬性
(1)靜態(tài)屬性
var pattern=/(g)oogle/; var str='This is google'; pattern.test(str); //執(zhí)行一下; alert(RegExp.input); //This is google! alert(RegExp.leftContext); //This is alert(RegExp.rightContext); //! alert(RegExp.lastMatch); //goole;(匹配最后一個(gè)) alert(RegExp.lastParen); //g
(2)實(shí)例屬性
google:全局ignoreCase:區(qū)分大小寫
lastIndex:上次匹配位置
5、獲取控制
(1)定義:正則表達(dá)式中的元字符是包含特殊含義的字符。
? ? ? ? (2)元字符可以控制匹配模式的方式,反斜杠后的元字符將失去其特殊含義
a、字符類
(1)單個(gè)字符或數(shù)字
.:點(diǎn)符號(hào)表示匹配除換行符外的任意字符
var pattern=/g..gle/; var str='google'; alert(pattern.test(str));
(2)重復(fù)字符
x*:星號(hào)*表示前邊那個(gè)字符x重復(fù)的0個(gè)或多個(gè)
x+:星號(hào)+表示前邊那個(gè)字符x重復(fù)的1個(gè)或多個(gè)
x.?:問(wèn)號(hào).?表示前邊的字符x重復(fù)的0個(gè)或1個(gè)
x{a,b}:{a,b}表示匹配前邊的字符x重復(fù)(a,b)次
var pattern=/go{2,4}gle/; var str='gooole'; alert(pattern.test(str)); //truevar pattern=/go{3}gle/; //o{3}表示限定為3個(gè) var str='goooole'; alert(pattern.test(str)); //true
var pattern=/go{3,}gle/; //o{3,}表示限定為3個(gè)及3個(gè)以上 var str='goooole'; alert(pattern.test(str)); //true
(3)單個(gè)字符
[a-z]:表示26個(gè)小寫字母,任意一個(gè)都可以匹配
[A-Z]:表示26個(gè)大寫字母,任意一個(gè)都可以匹配
(注意://i有i時(shí),不限定大小寫,為true)
var pattern=/[a-z]oogle/i; //[a-z]表示匹配小寫,有i后綴表示可不區(qū)分大小寫 var str='Goole'; alert(pattern.test(str)); //true,大寫G,由于有后綴i組合類型1——[a-zA-Z0-9]表示匹配括號(hào)中大小寫的a-z、A-Z、0-9 var pattern=/[a-zA-Z0-9]oogle/; var str='google'; alert(pattern.test(str)); //true
組合類型2——^[a-zA-Z0-9]表示匹配任意不在括號(hào)里大小寫的a-z、A-Z、0-9
b、數(shù)字: (1)簡(jiǎn)單的[0-9] [0-9]:表示匹配0-9的10個(gè)數(shù)字 var pattern=/[0-9]oogle/; //[0-9]表示匹配數(shù)字0-9 var str='6oole'; alert(pattern.test(str)); //true
(2)^、* ^表示非,*表示任意——以[^0-9]*為例 var pattern=/[^0-9*]oogle/; //[^0-9*]表示匹配任意個(gè)非數(shù)字0-9 var str='google'; alert(pattern.test(str)); //true
(3)小寫為正,大寫為非 \d:匹配數(shù)字 \D:匹配非數(shù)字,同[^0-9]相同
\w:匹配字母、數(shù)字及_ \W:匹配非字母、數(shù)字及_
c、數(shù)字+字符組合類型 組合類型1——[a-zA-Z0-9]表示匹配括號(hào)中大小寫的a-z、A-Z、0-9 var pattern=/[a-zA-Z0-9]oogle/; var str='google'; alert(pattern.test(str)); //true
組合類型2——^[a-zA-Z0-9]表示匹配任意不在括號(hào)里大小寫的a-z、A-Z、0-9
組合類型3——/^[a-z]oole[0-9]$/表示以a-z開(kāi)頭,以0-9結(jié)尾 var pattern=/^[a-z]oole[0-9]$/; var str='google'; alert(pattern.test(str)); //true
d、元字符 (1)\b:表示到達(dá)邊界 (2)\|:表示匹配或選擇模式
e、分組的概念 (1)單個(gè)字符 var pattern=/google{4,8}$/; //表示e重復(fù)4-8次 var str='googleeeee'; alert(pattern.test(str));
(2)字符串分組后,當(dāng)成一個(gè)字符 var pattern=/(google){4,8}$/; //分組,將google看成一個(gè)字符; var str='googlegooglegooglegoogle'; alert(pattern.test()); //true
(3)RegExp.$1表示匹配模式中第一個(gè)分組對(duì)應(yīng)的匹配字符串var pattern=/8(.*)8/; var str='This is a 8google8'; document.write(str.replace(pattern,'<strong>$1</strong>'));
f、貪婪模式+懶惰模式 (1)貪婪模式:“+” var pattern=/[a-z]+/; //+號(hào)表示使用了貪婪模式; var str='asdf'; alert(pattern.test(str)); //所有字符串都變成了1;
(2)懶惰模式:“+?” var pattern=/[a-z]+?/; //+?號(hào)表示使用了惰性模式; var str='asdf'; alert(pattern.test(str)); //只有第一個(gè)字符串都變成了1;
(3)應(yīng)用:運(yùn)用貪婪var pattern=/8(.*)8/; var str='8google8 8google8 8google8'; document.write(str.replace(pattern,'<strong>$1</strong>'));結(jié)果:<strong>google8 8google8 8google</strong>
(4)禁止貪婪var pattern=/8(.*?)8/; //運(yùn)用了惰性 var str='8google8 8google8 8google8'; document.write(str.replace(pattern,'<strong>$1</strong>'));結(jié)果:<strong>google</strong> <strong>google</strong>
<strong>google</strong>
總結(jié)
以上是生活随笔為你收集整理的Javascript高级程序设计——9.正则表达式(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 加息对股市影响利好还是利空
- 下一篇: Java 爬虫入门