重學前端(9)正則還真要多練

正則表達式簡介

什麼是正則表達式

正則表達式:用於匹配規律規則的表達式,正則表達式最初是科學家對人類神經系統的工做原理的早期研究,如今在編程語言中有普遍的應用。正則表一般被用來檢索、替換那些符合某個模式(規則)的文本。 正則表達式是對字符串操做的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。javascript

正則表達式的做用

  1. 給定的字符串是否符合正則表達式的過濾邏輯(匹配)
  2. 能夠經過正則表達式,從字符串中獲取咱們想要的特定部分(提取)
  3. 強大的字符串替換能力(替換)

正則表達式的特色

  1. 靈活性、邏輯性和功能性很是的強
  2. 能夠迅速地用極簡單的方式達到字符串的複雜控制
  3. 對於剛接觸的人來講,比較晦澀難懂

正則表達式的組成

  • 普通字符
  • 特殊字符(元字符):正則表達式中有特殊意義的字符

元字符

經常使用元字符串

元字符 說明
\d 匹配數字
\D 匹配任意非數字的字符
\w 匹配字母或數字或下劃線
\W 匹配任意不是字母,數字,下劃線
\s 匹配任意的空白符
\S 匹配任意不是空白符的字符
. 匹配除換行符之外的任意單個字符
^ 表示匹配行首的文本(以誰開始)
$ 表示匹配行尾的文本(以誰結束)

限定符

限定符 說明
* 重複零次或更屢次
+ 重複一次或更屢次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更屢次
{n,m} 重複n到m次

其它

[] 字符串用中括號括起來,表示匹配其中的任一字符,至關於或的意思
[^]  匹配除中括號之內的內容
\ 轉義符
| 或者,選擇二者中的一個。注意|將左右兩邊分爲兩部分,而無論左右兩邊有多長多亂
() 從兩個直接量中選擇一個,分組
   eg:wh(a|e)y匹配whay和whey
[\u4e00-\u9fa5]  匹配漢字
複製代碼

demo

驗證手機號:java

^\d{11}$
複製代碼

驗證郵編:正則表達式

^\d{6}$
複製代碼

驗證郵箱 xxx@why.cn:編程

^\w+@\w+\.\w+$
複製代碼

JavaScript 中使用正則表達式

建立正則對象

方式1:bash

var reg = new Regex('\\d', 'i');
var reg = new Regex('\\d', 'gi');
複製代碼

方式2:編程語言

var reg = /\d/i;
var reg = /\d/gi;
複製代碼

參數

標誌 說明
i 忽略大小寫
g 全局匹配
gi 全局匹配+忽略大小寫

正則匹配

// 匹配日期
var dateStr = '2019-04-10';
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/
console.log(reg.test(dateStr));
複製代碼

正則提取

// 1. 提取工資
var str = "張三:1000,李四:5000,王五:8000。";
var array = str.match(/\d+/g);
console.log(array);

// 2. 提取email地址
var str = "123123@xx.com,fuck@valuedopinions.cn 286669312@qq.com 二、emailenglish@emailenglish.englishtown.com 286669312@qq.com...";
var array = str.match(/\w+@\w+\.\w+(\.\w+)?/g);
console.log(array);

// 3. 分組提取 
// 3. 提取日期中的年部分 2015-5-10
var dateStr = '2016-1-5';
// 正則表達式中的()做爲分組來使用,獲取分組匹配到的結果用Regex.$1 $2 $3....來獲取
var reg = /(\d{4})-\d{1,2}-\d{1,2}/;
if (reg.test(dateStr)) {
  console.log(RegExp.$1);
}


複製代碼

正則替換

// 1. 替換全部空白
var str = " 123AD asadf asadfasf adf ";
str = str.replace(/\s/g,"xx");
console.log(str);

// 2. 替換全部,|,
var str = "abc,efg,123,abc,123,a";
str = str.replace(/,|,/g, ".");
console.log(str);
複製代碼

整理了小demo,能夠本身拓展

var str = 'b';
// var reg = /\d/; //只要字符串中有數字,就符合要求
// var reg = /\D/; //只要字符串中有非數字,就符合要求
// var reg = /\w/; //只要字符串中有數字或者字母,或者下劃線,就符合要求
// var reg = /\W/; //只要字符串中有數字或者字母,或者下劃線,就符合要求
// var reg = /\s/; //只要字符串中有空白字符就符合要求
// var reg = /\S/; //只要字符串中有非空白字符就符合要求
// var reg = /./; //只要有非換行符就符合條件
// var reg = /^a/; //只要字符串以a開頭就符合條件
// var reg = /a$/; //只要字符串以a結尾就符合條件
// var reg = /^abc$/; //要求字符串中只能有abc
// var reg = /^\d{11}$/;//要求字符串中只能出現11次數字
// var reg = /^\d{3,}$/;//要求字符串中只能出現3次及以上的數字
// var reg = /\d{3,}/;//要求字符串中只要包含3個及以上的數字就符合條件
// var reg = /^\d{3,5}$/;//字符串中只能出現3~5次的數字
// var reg = /^\d*$/; //字符串中要麼什麼都沒有,要麼就只能是數字
// var reg = /^\d+$/; //字符串中至少一個數字
// var reg = /^\d?$/; //字符串中要麼什麼都沒有,要麼只能有一個數字
// var reg = /^[abcd]$/; //只能有一個字符,而這個字符能夠是中括號的任何一個
// var reg = /^[^abcd]$/; //只能有一個字符,而這個字符能夠不能有中括號的任何一個
// var reg = /^\.$/; // 字符串中只能有一個點
// var reg = /^a|c$/; //以a開頭獲取以c結尾
// var reg = /^wh(a|g)y$/ //whay或者是whgy
// var reg = /^[a-Z]$/; //錯誤的
// var reg = /^[a-zA-Z]$/;
// var reg = /^[A-z]$/;//大寫字母在字符集中排序更靠前
  console.log(reg.test(str));
  
複製代碼

結語

  • 正則表達式,這東西,簡單的時候很簡單,複雜的時候賊複雜,歸根到底,仍是本身不夠熟悉,或者說忘了,整理的時候我發現都會,可是過一段時間不少就會忘了,由於大部分狀況下都是google,so 要想穩,那就只能多練,多整理,而後忘了的時候,有個印象,重拾也快。
  • 走的太遠,回頭看看會發現收穫不少
相關文章
相關標籤/搜索