正則表達式個人總結(一):正則表達式語法的深入理解第一部分

前言:

正則表達是就是用特殊字符組成的有一定規則的邏輯公式(規則字符串),主要用於對字符串進行過濾操作。

 
正則表達式的三個功能:
1.快速匹配指定的字符串;
2.替換遵照正則表達式規則的字符串;
3.在目標字符串中篩選指定的子字符串;
 
正則表達式的語法:
正則表達式是由普通字符(例如:a-z)和元字符(特殊字符)組成的文字模式,正則表達式作爲一個模板(規則字符串,將目標字符串與所搜索的字符串進行匹配)
 
一.創建正則表達式對象
RegExp: regular expression 
正則表達式對象的創建類似於數組對象的創建
 
構建正則表達式對象時使用的構造函數有兩個參數
  1.待匹配的字符串模板
  2.是匹配的模式,其中三種模式,這三種模式可以組合使用
      i:不區分大小寫
      g:全局查找,整個目標字符串範圍內
      m:多行查找
  (1)var reg = new RegExp(‘abc’);
  (2)reg = new RegExp('abc', 'g’);
  (3)var regExp = /abc/gi;(正則表達式的簡寫形式,字面量形式雙斜槓中包含的就是要被匹配的文字,雙斜槓後面就是模式組合,//定界,裏面的是規則字符串 )
二.語法詳解
1.修飾符

 

1
2
3
4
5
6
<script type="text/javascript">
  var str = 'Love me';
  var reg = /love/g;
  console.log(reg.test(str));
  // 控制檯輸出:false
  </script>
 
1
2
3
4
5
6
<script type="text/javascript">
  var str = 'Love me';
  var reg = /love/gi;
  console.log(reg.test(str));
  // 控制檯輸出:ture
  </script>

 

注:這裏的test方法是正則表達式的一個方法,主要作用是用規則字符串去檢索目標字符串,匹配成功則返回ture否則返回false。對於本文的字符串的匹配成功與否本文都將採用此方法。
注:在理解正則表達式的的匹配方式的時候可以這樣理解;首先要將目標字符和規定字符看做是一個一個的字符,然後在目標字符串中檢索規則字符的第一個l這個字符,如果檢索匹配成功,接下來去檢所規則字符串中的o是否能和目標字符串上一次匹配 成功的下一個字符匹配成功,成功則繼續匹配,否則匹配失敗,執行相關操作。

 2.元字符

對於這個看後面的描述就大致可以知道意思,在此不做解釋。

3.量詞

量詞:量詞規定了匹配成功至少需要的次數下限,以及嘗試匹配的次數上限,即量詞前字符或者字符數組重複必須滿足的次數下限,及嘗試(深刻理解嘗試這個概念)重複的上限;在理解量詞的時候要學會等價的概念。
先對這些量詞進行解釋:+,*,?,{x},{x,y},^,$
 
(1)+
+表示在目標字符串中檢索匹配正則表達式中*前的字符或者字符組(字符組概念下面會進行闡述),至少目標字符串中有一個該字符或字符組;
等價於{1,}
例子:
 
1
2
3
4
5
6
<script type="text/javascript">
  var str = '211211111';
  var reg = /1+/gi;
  console.log(reg.test(str));
  // 控制檯輸出:ture
  </script>

 

(2)*
*表示在目標字符串中檢索匹配正則表達式中*前的字符或者字符組,匹配儘可能多的次數,一次也沒匹配成功也無所謂;
等價於{0,}
例子:
 
1
2
3
4
5
6
<script type="text/javascript">
  var str = '211211111';
  var reg = /1*/gi;
  console.log(reg.test(str));
  // 控制檯輸出:ture
  </script>

 

1
2
3
4
5
6
<script type="text/javascript">
  var str = '211211111';
  var reg = /3*/gi;
  console.log(reg.test(str));
  // 控制檯輸出:ture
  </script>
 
(3)?
?表示在目標字符串中檢索匹配正則表達式中*前的字符或者字符組,至少匹配0次,嘗試匹配1次,即使匹配1次失敗也無所謂;
等價於{0,1}
例子:
 
1
2
3
4
5
6
<script type="text/javascript">
  var str = '211211111';
  var reg = /1?/gi;
  console.log(reg.test(str));
  // 控制檯輸出:ture
  </script>

 

1
2
3
4
5
6
<script type="text/javascript">
  var str = '211211111';
  var reg = /3?/gi;
  console.log(reg.test(str));
  // 控制檯輸出:ture
  </script>
 
(4){x}
{x}表示在目標字符串中檢索匹配正則表達式中{x}前的字符或者字符組,必須在目標字符串中找到重複x次的該量詞前的字符,否則就算匹配失敗;
例子:
 
1
2
3
4
5
6
<script type="text/javascript">
var str = '211211111';
var reg = /1{7}/gi;
console.log(reg.test(str));
// 控制檯輸出:false
</script>
 
(5){x,y}
{x,y}表示在目標字符串中檢索匹配正則表達式中{x}前的字符或者字符組,必須在目標字符串中找到量詞前重複x次的字符,如果匹配成功,在此基礎之上儘可能去嘗試找到重複次數爲y的字符組成的字符串,如果未匹配到重複次數y次的字符組成的字符串也沒關係,退而求其次找到重複y-1次的也可,如果仍未找到,那麼繼續減少重複次數,但是前提條件是,必須重複x次,因此x是限制能否匹配成功的必須條件
例子:
 
1
2
3
4
5
6
<script type="text/javascript">
  var str = '211211111';
  var reg = /1{3,12}/gi;
  console.log(reg.test(str));
  // 控制檯輸出:ture
  </script>

注:這裏的12改成更大的數也依舊會返回true

1
2
3
4
5
6
<script type="text/javascript">
  var str = '211211111';
  var reg = /1{7,12}/gi;
  console.log(reg.test(str));
  // 控制檯輸出:false
  </script>
 
(6)^
^表示的就是匹配必須以該量詞之後的字符開頭的目標字符
對於^love 可以這樣理解: 匹配的是以l作爲一行的第一個字符,緊跟一個o,緊跟一個v,緊跟一個e的文本
 
1
2
3
4
5
6
<script type="text/javascript">
  var str = 'love me';
  var reg = /^love/gi;
  console.log(reg.test(str));
  // 控制檯輸出:ture
  </script>

 

(7)$

$表示的就是匹配必須以該量詞之前的字符結尾的目標字符

 

1
2
3
4
5
6
<script type="text/javascript">
  var str = 'love me';
  var reg = /me$/gi;
  console.log(reg.test(str));
  // 控制檯輸出:ture
  </script>
$^他們匹配的是一個位置,而不是具體的文本,

 注:本文表格截屏自W3C的正則表達式的表格。

對於選擇,分組等語法在下一部分會詳細介紹,以上內容純屬個人總結理解。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章