正則表達式

正則表達式

regular expression:RegExp

用來處理字符串的規(guī)則

  • 只能處理字符串
  • 它是一個規(guī)則:可以驗證字符串是否符合某個規(guī)則(test),也可以把字符串中符合規(guī)則的內(nèi)容捕獲到(exec / match...)
  • 學習正則就是用來制定某種規(guī)則

正則的作用

  • 正則定義了一個字符串的模型。
  • 正則的第一個作用是“驗證某字符串是否和這個模型相匹配”。
  • 正則的第二個作用是“把匹配到的內(nèi)容找出來”。

編寫正則表達式

創(chuàng)建方式有兩種:

  • 字面量創(chuàng)建方式(兩個斜杠之間包起來的,都是用來描述規(guī)則的元字符;以及模式修正符)
var reg1 = /\d+/;
  • 構造函數(shù)模式創(chuàng)建 (兩個參數(shù):元字符字符串,修飾符字符串)
var reg2 = new RegExp("\\d+");

正則表達式由兩部分組成:

  • 元字符
  • 修飾符

元字符

/*常用的元字符*/
//1.量詞元字符:設置出現(xiàn)的次數(shù)
* 零到多次  
+ 一到多次
? 零次或者一次
{n} 出現(xiàn)n次
{n,} 出現(xiàn)n到多次
{n,m} 出現(xiàn)n到m次

//2.特殊元字符:單個或者組合在一起代表特殊的含義
\    轉義字符(普通->特殊->普通)
.    除\n(換行符)以外的任意字符
^    以哪一個元字符作為開始
$    以哪一個元字符作為結束
\n   換行符
\d   0~9之間的一個數(shù)字
\D   非0~9之間的一個數(shù)字 (大寫和小寫的意思是相反的)
\w   數(shù)字、字母、下劃線中的任意一個字符
\s   一個空白字符(包含空格、制表符、換頁符等)
\t   一個制表符(一個TAB鍵:四個空格)
\b   匹配一個單詞的邊界
x|y  x或者y中的一個字符
[xyz] x或者y或者z中的一個字符
[^xy] 除了x/y以外的任意字符
[a-z] 指定a-z這個范圍中的任意字符  [0-9a-zA-Z_]===\w
[^a-z] 上一個的取反“非”
()   正則中的分組符號
(?:) 只匹配不捕獲
(?=) 正向預查
(?!) 負向預查 

//3.普通元字符:代表本身含義的
/bingdu/ 此正則匹配的就是 "bingdu"

修飾符

/*正則表達式常用的修飾符:*/
i  ignoreCase  忽略單詞大小寫匹配
m  multiline   可以進行多行匹配
g  global      全局匹配

/A/.test('abc')  false
/A/i.test('abc') true

元字符詳細解析

^和 $

^ 用在正則表達式開始/之后,表示以...開始

var reg = /^\d/;   // 表示以\d開始  (以數(shù)字開始)
console.log(reg.test("abc"));   false
console.log(reg.test("123abc"));  true
console.log(reg.test("abc123")); false
var reg = /\d$/;
console.log(reg.test("abc"));  false
console.log(reg.test("123abc")); false
console.log(reg.test("abc123")); true
// ^/$兩個都不加表示字符串中包含符合規(guī)則的內(nèi)容即可
var reg1 = /\d+/;
// ^/$兩個都加表示字符串只能是和規(guī)則一致的內(nèi)容
var reg2 = /^\d+$/;

\轉義符

//.不是小數(shù)點,是除\n外的任意字符
var reg = /^2.3$/;  // 以2開始, 以3結束,中間有一位字符(除\n都可以)
console.log(reg.test("2.3"));   // true
console.log(reg.test("2#3"));   // true
console.log(reg.test("23")); // false    中間沒有任意字符
console.log(reg.test("2tt3")); // false   中間有兩個(只能有一個)
//基于轉義字符,讓其只能代表小數(shù)點
var reg = /^2\.3$/;
console.log(reg.test("2.3"));  // true
console.log(reg.test("2#3"));  // false

// var reg = /^[0-9]\.[0-9]$/;
    // console.log(reg.test("2.3")); // true
    // console.log(reg.test("9.7")); // true
    // console.log(reg.test("2#3")); // false
    // console.log(reg.test("23")); // false
    // console.log(reg.test("2tfdfdt3")); // false
    // console.log(reg.test("94.76")); // false

    // var reg = /^[0-9]+\.[0-9]$/;
    // console.log(reg.test("2.3")); // true
    // console.log(reg.test("9.7")); // true
    // console.log(reg.test("2#3")); // false
    // console.log(reg.test("23")); // false
    // console.log(reg.test("2tfdfdt3")); // false
    // console.log(reg.test("9444.7")); // true

    var reg = /^[0-9]+\.[0-9]{2}$/;
    console.log(reg.test("2.3")); // true
    console.log(reg.test("9.7")); // true
    console.log(reg.test("2#3")); // false
    console.log(reg.test("23")); // false
    console.log(reg.test("2tfdfdt3")); // false
    console.log(reg.test("9444.74")); // true

x|y

//直接x|y會存在很亂的優(yōu)先級問題,一般我們寫的時候都伴隨著小括號進行分組,因為小括號改變處理的優(yōu)先級 小括號:分組
var reg = /^(13|15)$/;
console.log(reg.test("13")); true
console.log(reg.test("15")); true
console.log(reg.test("135"));  false
console.log(reg.test("153"));  false

[]

//1.中括號中出現(xiàn)的字符一般都代表本身的含義
var reg = /^[@+]$/;
console.log(reg.test("@")); true
console.log(reg.test("+")); true

console.log(reg.test("@+"));  false
var reg = /^[\d]$/; //\d在中括號中還是0-9

console.log(reg.test("d"));  // false
console.log(reg.test("9"));   // true

//2.中括號中不存在多位數(shù)
reg = /^[18]$/;
console.log(reg.test("1")); true
console.log(reg.test("8")); true
console.log(reg.test("18")); false

reg = /^[10-29]$/; //1或者0-2或者9
console.log(reg.test("1"));  true
console.log(reg.test("9"));  true
console.log(reg.test("0"));  true
console.log(reg.test("2"));  true
console.log(reg.test("10"));  false

{n}, {n,}, {m,n} 注意 m和n之間不能有空格

// {n}表示出現(xiàn)過n次
var reg = /c{1}/;   
console.log(res.test('china')); 
console.log(res.test('chinac')); 
// {m,n}匹配最少m個,最多n個  c{3,4}的意思是,連續(xù)的3個c或者4個c

// c{1,}表示1個以上的c,相當于元字符+

// *表示0次或者多次,等同于{0,},即c* 和c{0,} 是一個意思。
// +表示一次或者多次,等同于{1,},即c+ 和c{1,} 是一個意思。
// ?表示0次或者1次,等同于{0,1},即c? 和c{0,1} 是一個意思。

正則表達式的方法:

  • test() // test() 方法檢索字符串中的指定值。返回值是 true 或 false。
  • exec() // exec() 方法檢索字符串中的指定值。返回值是被找到的值。如果沒有發(fā)現(xiàn)匹配,則返回 null。

常用的正則表達式

  1. 驗證是否為有效數(shù)字

    /*
     規(guī)則分析:
         1. 可能出現(xiàn)+-(正負)  [+-]?
         2. 一位0-9可以的,或者多位,但多位的情況下,首位不能是0   \d|[1-9]\d+
         3. 可能會小數(shù)點      (\.\d+)?
    */
    var reg = /^[+-]?(\d|[1-9]\d+)(\.\d+)?$/;
    
  1. 驗證密碼

    //數(shù)字、字母、下劃線    \w
    //6~16位   {6,16}
    var reg = /^\w{6,16}$/
    
  2. 驗證真實中文姓名

    1. 中文的unicode編碼區(qū)間:  \u4e00 - \u9fa5
    2. 長度  至少兩個, 至多30個  {2,10}
    3. 可能譯名 · 
    var reg = /^[\u4e00-\u9fa5]{2,10}(·[\u4e00-\u9fa5]{2,10}){0,2}$/;
    
  1. 驗證郵箱

    //1.開頭是數(shù)字字母下劃線(1到多位)
     \w+
    //2.可以是 -數(shù)字字母下劃線  (零到多次)
        [\w-]*
    //3. @后面緊跟著:數(shù)字、字母 (1-多位)   @后不能直接跟下劃線和中劃線
          @[a-zA-Z0-9]+
    //4. 再后面跟字母、數(shù)字、下劃線、中劃線
         [\w-]*
    //5. 域名     .com也可以多域名.com.cn
           (\.[a-zA-Z0-9]+)+
     var reg = /^\w+[\w-]*@[a-zA-Z0-9]+[\w-]*(\.[a-zA-Z0-9]+)+$/;
    
  1. 驗證身份證號碼

    // 1.基本上是數(shù)字 一共18位
    // 2. 最后一位可能是X
    var reg = /^\d{17}(\d|X)$/;
    
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容