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

首頁 > 編程 > Regex > 正文

正則的幾個基本概念

2020-03-16 21:22:41
字體:
來源:轉載
供稿:網友
經常看到說正則的文章,但說的只是方法,卻很少有說以下幾個基本概念: 

1.貪婪:+,*,?,{m,n}等默認是貪婪匹配,即盡可能多匹配,也叫最大匹配 
如果后面加上?,就轉化為非貪婪匹配,需要高版本支持 

2.獲取:默認用(x|y)是獲取匹配,很多時候只是測試,不一定要求得到所匹配的數據,尤其在嵌套匹配或大數據中就要用非獲取匹配(?:x|y),這樣提高了效率,優化了程序。 

3.消耗:默認是消耗匹配,一般在預查中是非消耗匹配。 
舉個例子,2003-2-8要變為2003-02-08 
如果用/-(/d)-/第二次匹配將從8開始,從而只替換第一個2,錯誤 
如果用/-(/d)(?=-)/則第二次匹配從第二個-開始,即不消耗字符- 

4.預查:js中分為正向預查和負向預查 
如上面的(?=pattern)是正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。還有(?!pattern)是負向預查,在任何不匹配 pattern 的字符串開始處匹配查找字符串。負向預查有時會用在對[^]的擴充,[^]只是一些字符,而?!可以使整個字符串。 

5.回調:一般用在替換上,即根據不用的匹配內容返回不用的替換值,從而簡化了程序,需要高版本支持 

6.引用:/num 對所獲取的第num個匹配的引用。 
例如,'(.)/1/1' 匹配AAA型。'(.)(.)/2/1' 匹配ABBA型。 
  1. <script>  
  2. var str="我不...不...不是...是結...結...結巴...巴"  
  3. alert(str.replace(/(.)(/.+/1)+/g,"$1"));  
  4. </script> 

當然還有很多,這些都只是基本的需要掌握的 

遇到正則問題,一般可用以下兩種方法解決: 

1.分類,即根據所有的可能列出各種情況,如2003以內的數 
0 0 
1-999 [1-9]/d{0,2} 
1000-1999 1/d{3} 
2000-2003 200[0-3] 

所以最后的匹配就是 (0|[1-9]/d{0,2}|1/d{3}|200[0-3]) 

2.分組,即將整句分為不同的最小單元,如'、%、_成雙出現 
能成組的,即允許存在的,有 
'' 
%% 如果是大于2的偶數個可細分為多個更小的2字符單元 
__ 
[^'%_] 非以上字符 

所以最后的匹配就是 ^(''|%%|__|[^'%_])*$ 


-------------------------------------------------------------------------------- 

replace + function 5.5+支持 
  1. <script>  
  2. function f2c(s) {  
  3.   var test = /(/d+(/./d*)?)F/b/g;    // 初始化模式。  
  4.   return(s.replace  
  5.     (test,  
  6.       function($0,$1,$2) {   
  7.         return((($1-32) * 5/9) + "C");  
  8.       }  
  9.     )  
  10.   );  
  11. }  
  12. document.write(f2c("Water freezes at 32F and boils at 212F."));  
  13. </script> 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和林格尔县| 内乡县| 临城县| 社会| 大埔县| 徐闻县| 双峰县| 伊金霍洛旗| 邹平县| 墨竹工卡县| 大竹县| 泾川县| 秦安县| 甘德县| 古交市| 精河县| 泽库县| 资兴市| 江阴市| 临猗县| 阳东县| 新绛县| 双峰县| 黑水县| 张北县| 濮阳县| 青海省| 宁津县| 梁山县| 平舆县| 乐业县| 冷水江市| 广南县| 沙田区| 图片| 酒泉市| 当阳市| 民乐县| 永清县| 大田县| 定陶县|