国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Regex > 正文

javascript的正則表達(dá)式學(xué)習(xí)資料復(fù)習(xí)

2020-03-16 21:11:27
字體:
供稿:網(wǎng)友
這里主要記錄幾個自己之前不是很熟悉的知識點,其他的知識點,上面兩個網(wǎng)站中已有詳細(xì)的參考
 
 
關(guān)于反向引用 
復(fù)制代碼代碼如下:

// 測試函數(shù) 
function matchReg(reg, str) { 
var result = str.match(reg); 
if(result) { 
console.dir(result); 
} else { 
console.log('match failed'); 



var reg = /([A-Za-z]{0,6})/1/; 
var str = 'AndrewAndrew'; 
// 測試通過 
matchReg(reg, str); 

//通過(?:pattern)的方式,不記錄子表達(dá)式匹配的內(nèi)容(本例中為Andrew) 
//所以/1對子表達(dá)式匹配內(nèi)容的引用失敗了 
//注意:這里強(qiáng)調(diào)的是子表達(dá)式所匹配的內(nèi)容,而不是子表達(dá)式本身 
reg = /(?:[a-zA-Z]{0,6})/1/; 
// 測試不通過 
matchReg(reg, str); 

關(guān)于子表達(dá)式的定義 
var parse_number = /^-?/d+(?:/./d*)?(?:e[+/-]?/d+)?$/i; 
這是一個解析數(shù)字的正則表達(dá)式,其中的子表達(dá)式有(?:/./d*)和(?:e[+/-]?/d+) 
/.和/-分別是對.和-的轉(zhuǎn)義表達(dá) 
順便復(fù)習(xí)下.表示除換行符以外的其他字符 
-一般用于[a-zA-Z0-9]表示匹配范圍 
如果其中沒?:例如(/./d*)那么按照先后順序,反向引用的關(guān)系如下 
/1-->(/./d*) 
/2-->(e[+/-]?/d+) 
如果有更多的話,就以此類推/3 /4 /5.... 
再次強(qiáng)調(diào),引用的是子表達(dá)式匹配的內(nèi)容,是具體的文本 
關(guān)于正向預(yù)查 
復(fù)制代碼代碼如下:

var reg = /I like (?=shanghai)/; 
var str = 'I like shanghai'; 
matchReg(reg, str); //測試通過 

str = 'I like beijing'; 
matchReg(reg, str); //不通過 

跑下上面的代碼,就馬上理解什么算是正向預(yù)查了,如上面的例子,通過(?=pattern)的形式,正則 表達(dá)式預(yù)測下后面的內(nèi)容是不是符合要求,如果是那就順利匹配. 
相對地,(?!=pattern)的使用意圖正好與(?=pattern)相反,就不復(fù)述了 
關(guān)于貪心和非貪心匹配模式 
復(fù)制代碼代碼如下:

// 貪心 
var reg = //d{1,}/; 
var str = '1999'; 
matchReg(reg, str); // result[0]為1999 能多匹配就多匹配 

// 非貪心 
reg = //d{1,}?/; 
matchReg(reg, str); // result[0]為1 只匹配了一個 

從上面的結(jié)果很容易看出"貪心"和"非貪心"的含義 
pattern?這就表明非貪心匹配模式,一般情況就是貪心的 
關(guān)于Regexp對象exec函數(shù)返回的結(jié)果 
復(fù)制代碼代碼如下:

// 關(guān)于返回結(jié)果是個什么 
// matchReg函數(shù)中console.dir(result)能說明問題,firebug中一看便知 
關(guān)于string的replace函數(shù) 
function camelize(str) { 
return str.replace(/-(/w)/g, function(inputStr, p1) { 
console.log(p1); 
return p1.toUpperCase(); 
}); 

console.log(camelize('background-color')); 

function uncamelize(str, sep) { 
sep = sep || '-'; 
return str.replace(/([a-z])([A-Z])/g, function(inputStr, p1, p2) { 
console.log('p1:%s, p2:%s', p1, p2); 
return p1 + sep + p2; 
}); 

console.log(uncamelize('backgroundColor', '-')); 

上面兩個例子,主要用于說明replace函數(shù)的用法,當(dāng)然還有search,split等函數(shù)可以充分利用正則表達(dá)式的優(yōu)勢 
關(guān)于javascript正則表達(dá)式的最佳實踐 
就一句話:盡量的精簡,不要復(fù)雜,利于讀懂和維護(hù)!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 邵东县| 缙云县| 肥乡县| 格尔木市| 南涧| 滕州市| 繁昌县| 化德县| 吉林省| 阿瓦提县| 平利县| 读书| 铜陵市| 福建省| 平安县| 泸溪县| 崇文区| 彭阳县| 华蓥市| 双桥区| 民勤县| 封开县| 玛沁县| 大竹县| 左贡县| 平顶山市| 杂多县| 雅江县| 襄城县| 饶平县| 阳信县| 开化县| 保康县| 五峰| 都兰县| 黄石市| 汉源县| 都兰县| 涟源市| 新民市| 鸡东县|