正則表達(dá)式的() [] {}有不同的意思,() 是為了提取匹配的字符串。表達(dá)式中有幾個(gè)()就有幾個(gè)相應(yīng)的匹配字符串。
(\s*)表示連續(xù)空格的字符串。[]是定義匹配的字符范圍。
比如 [a-zA-Z0-9] 表示相應(yīng)位置的字符要匹配英文字符和數(shù)字。
[\s*]表示空格或者*號(hào)。{}一般用來表示匹配的長(zhǎng)度,比如 \s{3} 表示匹配三個(gè)空格,\s[1,3]表示匹配一到三個(gè)空格。
(0-9) 匹配 '0-9′ 本身。 [0-9]* 匹配數(shù)字(注意后面有 *,可以為空)[0-9]+ 匹配數(shù)字(注意后面有 +,不可以為空){1-9} 寫法錯(cuò)誤。
[0-9]{0,9} 表示長(zhǎng)度為 0 到 9 的數(shù)字字符串。
例如:在PHP中過濾內(nèi)容里面有數(shù)字或空格數(shù)字
JavaScript正則表達(dá)式在線測(cè)試工具:http://tools.jb51.net/regex/javascript
1、作為分組運(yùn)算符:
分組運(yùn)算符應(yīng)該是再熟悉不過了,因?yàn)樵谛W(xué)數(shù)學(xué)中就有應(yīng)用,例如:
var a=(1+2)*4;
console.log(a);
以上代碼的輸出值是12,因?yàn)榉纸M運(yùn)算符可以改變運(yùn)算符的優(yōu)先級(jí),否則的話輸出值是9。
擴(kuò)展說明:
1.很多教程說它是一個(gè)強(qiáng)制運(yùn)算符,其實(shí)在ECMAScript中,根本就沒有強(qiáng)制運(yùn)算符這么一個(gè)概念,它就是普通分組運(yùn)算符。
2.這也是為什么eval()函數(shù)將json格式字符串轉(zhuǎn)換為對(duì)象需再嵌套一個(gè)小括號(hào)的原因,可以參閱使用eval()將json字符串轉(zhuǎn)換為對(duì)象要多加一個(gè)小括號(hào)一章節(jié)。
2、函數(shù)聲明和函數(shù)調(diào)用參數(shù)列表:
在聲明函數(shù)或者調(diào)動(dòng)函數(shù)的時(shí)候,如果有參數(shù),那么就會(huì)將參數(shù)放在小括號(hào)之中,代碼如下:
function func(a,b){
//代碼
}
func(1,2);
3、與特定關(guān)鍵字形成特定語句:
小括號(hào)可以與特定的關(guān)鍵詞形成特定的語句,代碼如下:
if(a>1){
//代碼
}
while(i<len){
//代碼
}
for(var i=0;i<len;i++){
//代碼
}
4、表達(dá)式方式函數(shù)聲明和立即調(diào)用函數(shù)表達(dá)式:
創(chuàng)建一個(gè)函數(shù)除了函數(shù)聲明方式聲明之外,還可以使用表達(dá)式方式,代碼如下:
function func(){
//代碼
}
var func=function(){
//代碼
}
第二種就是表達(dá)式方式聲明一個(gè)函數(shù)。下面介紹一下函數(shù)聲明和表達(dá)式方式的區(qū)別:
函數(shù)聲明必須帶有標(biāo)識(shí)符,也就是函數(shù)名,但是函數(shù)表達(dá)式方式,標(biāo)識(shí)符帶不帶都可以。
function 函數(shù)名稱 (參數(shù):可選){ 函數(shù)體 }//函數(shù)聲明方式
function 函數(shù)名稱(可選)(參數(shù):可選){ 函數(shù)體 }//函數(shù)表達(dá)式方式
要區(qū)分一個(gè)代碼是函數(shù)聲明還是函數(shù)表達(dá)式,那要看代碼的應(yīng)用上下文,例如:
function func(){};//函數(shù)聲明方式
(function func(){})//函數(shù)表達(dá)式方式
出現(xiàn)在運(yùn)算符相關(guān)上下文中,那么它就是一個(gè)表達(dá)式,例如下面最常見的代碼:
1
var func=function(){}
上面介紹一下什么是函數(shù)表達(dá)式,下面就看一下如何立即調(diào)用函數(shù)表達(dá)式:
(function(){})();
(function(){}());
!function(){}();
上面三個(gè)語句都是在運(yùn)算符相關(guān)上下文中,所以都是表達(dá)式,就可以強(qiáng)制調(diào)用了,下面做一下分析:
1.(function(){})(),(function(){})是一個(gè)表達(dá)式,會(huì)強(qiáng)制其理解成函數(shù)直接量方式,也就是表達(dá)式方式創(chuàng)建函數(shù),(function(){})它會(huì)返回函數(shù)對(duì)象的引用,最后使用小括號(hào)()調(diào)用此函數(shù)。
2.(function(){}()),如果不用外面包裹的小括號(hào),{}就會(huì)理解為復(fù)合語句,那么function(){}就被理解為函數(shù)聲明,但是沒有標(biāo)識(shí)符,所以會(huì)報(bào)錯(cuò),使用小括號(hào)以后,就會(huì)變成表達(dá)式,也會(huì)被理解為直接量方式。
3.!function(){}(),原理同上,!也是一個(gè)運(yùn)算符,所以在原理同上。
二、{ } 大括號(hào),表示定義一個(gè)對(duì)象,大部分情況下要有成對(duì)的屬性和值,或是函數(shù)。
如:var LangShen = {"Name":"Langshen","AGE":"28"};
上面聲明了一個(gè)名為“LangShen”的對(duì)象,多個(gè)屬性或函數(shù)用,(逗號(hào))隔開,因?yàn)槭菍?duì)象的屬性,
所以訪問時(shí),應(yīng)該用.(點(diǎn))來層層訪問:LangShen.Name、LangShen.AGE,當(dāng)然我們也可以用數(shù)組的方式來訪問,如:LangShen["Name"]、LangShen["AGE"],結(jié)果是一樣的。
該寫法,在JSON數(shù)據(jù)結(jié)構(gòu)中經(jīng)常用,除此之外,我們平時(shí)寫函數(shù)組的時(shí)候,也經(jīng)常用到,如:
三、[ ]中括號(hào),表示一個(gè)數(shù)組,也可以理解為一個(gè)數(shù)組對(duì)象。
如:var LangShen = [ "Name","LangShen","AGE","28" ];
很明顯,每個(gè)值或函數(shù),都是獨(dú)立的,多個(gè)值之間只用,(逗號(hào))隔開,因?yàn)槭菙?shù)組對(duì)象,所以它等于:
var LangShen = Array( "Name","LangShen","AGE","28" );
訪問時(shí),也是和數(shù)組一樣,alert( LangShen[0] );
四、{ } 和[ ] 一起使用,我們前面說到,{ } 是一個(gè)對(duì)象,[ ] 是一個(gè)數(shù)組,我們可以組成一個(gè)對(duì)象數(shù)組,如:
如:alert( LangShen.MySon[1].Name ) ;
更多建議: