認識正規表示式(上)

stu_wei發表於2018-12-11

本片介紹 javascript 裡的正規表示式

是什麼

遇到不認識的事物時,人們第一想到的可能是想知道這個東西,是什麼?但是,實際上定義一個東西很難,即使是較為恰當的描述,也可能是晦澀難懂的。本篇選擇直接略過這個問題。

而正規表示式作為一個“工具”,更為直接的描述方式是,這個東西能用來幹什麼,以及怎麼使用它。

功能

正規表示式可以用來描述一個字串。

比如:

  • 以字母 A 開頭的字串
  • 不包含數字的字串
  • 包含大小寫字母、數字及特殊符號的字串
  • 符合 email 地址規則的字串
  • ……

顯然,正規表示式和字串的關係非同一般。字串上還有幾個方法,與正規表示式有關。

String 上的方法

search

可能你這麼用過 String.search 方法:

var str = 'aaa123aaa';
var index = str.search('123');
console.log(index); // 3

乍一看和 String.indexOf 差不多,確實這樣,如果 search 方法收到一個字串引數( 比如 A.search(B)),會像 indexOf 一樣,返回 B 字串在 A 字串第一次出現的位置。和 indexOf 方法不同的是,search 方法可以接收正規表示式物件,假設有一個物件 R 表示“數字組成的字串”,那麼就會有下面的結果:

var R = xxxx; // 這裡先不考慮如何建立正規表示式物件
var str = 'aaa123aaa';
var index = str.search(R);
console.log(index); // 3

相同的,search 方法也可以用來檢索“非數字、字母”第一次出現的位置、“大寫字母第一次出現的位置”、“ ‘abc’ 或者 ‘bbc’ 或者 ‘ccc’ 第一次出現的位置” ……

replace

這個就是很常用的方法了:

var str = 'aaa123aaa';
var str2 = str.replace('123',0);
console.log(str2); // aaa0aaa

那麼上例中的 str2 同樣可以替換為一個正規表示式物件:把字串中的數字替換為xxx,把非數字、字母替換為 ""(刪除非數字字母的字元)

match

碼者前兩天正好用到了這個方法,需求是獲取本頁路徑最後一個反斜槓後面的內容。先上碼:

var path = 'http://www.xxx.com/api/user/6'; // 也就是獲取 /6
var R= xxxx; // 此處的 R 假設表示“最後一個 / 以及後面的內容
var results = path.match(R);
var result = results[0];
console.log(result); // "/6"

不難理解:match 方法匹配正規表示式描述的子字串,並返回匹配到的結果。

RegExp 上的方法

在 javascript 裡,像有關數學方面的操作,我們會想到 Math 物件,比如 Math.ceil, Math.floor 方法;像有關日期的操作,我們會想到 Date 物件,比如 Date.now, Date.getTime;有一個叫 RegExp 的物件,用來封裝一些有關正規表示式方面的方法。

test

這是可能是正規表示式最簡單,使用率最高的方法了吧。比如註冊賬戶的時候,我們需要檢測一下使用者輸入的手機號是否是正確的格式。就可以:

var R = xxxx; // 一個用來描述手機號格式的正規表示式物件
var tel = '1564xxxx330';
var result = R.test(tel);
console.log(result); // true 或者 false

可以說,RegExp.test 就是用來檢驗一個字串的格式

exec

這是一個和 String.match 方法很像的方法,本文重點在對正規表示式的認識,不再贅述。

以上所有例子、方法都只大致介紹一個方法最基本的功能,其實正規表示式的功能遠比本文所說的強大很多很多,而且還有更多實用的方法。更詳細的內容請百度(不建議一開始就把所有功能記住,建議用到的時候看一下),比如搜尋關鍵字 js+match

如何建立 RegExp 物件

上面的內容是介紹正規表示式有什麼作用,以及一些簡單的使用方法。而正規表示式的難點,在於如何建立自己需要的正規表示式。請關注下篇。

相關文章