【JavaScript知識點八】javascript 正則表達式

【JavaScript知識點八】 正則表達式

1.建立

1-1 方式

  • 字面量 var 變量名 = /表達式/模式修飾符
  • 構造函數 var 變量名 = new RegExp("表達式","模式修飾符")

1-2 表達式

  • 單個字符與數字
    . 查找單個字符,除換行符和行結束符
    [a-z0-9] 匹配方括號中的任意字符
    [^a-z0-9]匹配不在方括號中的任意字符
    \d 匹配數字
    \D 匹配非數字
    \w 匹配字母
    \W 匹配非字母javascript

  • 空白字符
    \0 匹配null字符
    \f 匹配換頁符
    \n 匹配換行符
    \r 匹配回車符
    \s 匹配空白字符
    \S 匹配非空白字符
    \t 匹配製表符java

  • 定位符
    ^ 行首匹配
    $ 行尾匹配
    \A 只匹配字符串的開始處
    \b 匹配單詞邊界,此在[]內無效
    \B 匹配非單詞邊界
    \G 匹配當前搜索的開始位置
    \Z 匹配字符串結束處或行尾
    \z 只匹配字符串結束處正則表達式

  • 限定符
    x? 匹配0個或1個x
    x* 匹配0個或任意多個x
    x+ 匹配至少1個x
    x{m,n} 匹配最少m個,最多n個x數組

  • 分組
    (?:x) 匹配x但不記錄匹配結果
    x(?=y) 當x後接y時匹配x
    x(?!y) 當x後不是y時匹配x函數

  • 引用 \1...\9 $1...$9 返回九個在模式匹配期間找到的、最近保存的部分
  • 或模式 x|y|z 匹配x或y或z
  • 模式修飾符
    g全局模式,應用於全部字符串;
    i執行對大小寫不敏感的匹配;
    m多行匹配模式測試

2. 屬性

2-1 實例屬性

  • global 檢測是否設置g標記
  • ignoreCase 檢測是否設置了i標記
  • multiline 檢測是否設置了m標記
  • source 返回正則表達式的字符串表示
  • lastIndex 返回被查找字符串中下一次成功匹配的開始位置

2-2 構造函數屬性

  • s_ input 返回最近一次匹配的字符串
  • $& lastMatch 返回最近一次的匹配項
  • $+ lastParen 返回最近一次匹配的捕獲組
  • $` leftContext 返回被查找的字符串中從字符串開始位置到最後匹配以前的位置之間的字符
  • $' rightContext 返回被搜索的字符串中從最後一個匹配位置開始到字符串結尾之間的字符
  • $* multiline 檢測表達式是否採用多行模式匹配m

3. 方法

3-1 實例方法

  • exec
    功能:在字符串中執行匹配檢索,返回結果數組
    參數:要應用模式匹配的字符串
    特性:使用全局標記g 持續查找全部匹配項並返回
    不使用全局標記g 始終返回第一個匹配項信息
    執行過程:
    ①檢索字符串參數,獲取正則表達式匹配文本
    ②找到匹配文本則返回一個數組:
    第0個元素——與整個模式匹配的字符串
    其它元素——與捕獲組匹配的字符串
    ③不然返回null
    派生屬性:
    ①index 匹配項在字符串中的位置
    ②input 應用正則表達式的字符串
    ③length 返回數組元素的個數code

  • test
    功能:在字符串中測試模式匹配,返回true或falseip

3-2 字符串方法

  • match 找到一個或多個正則表達式的匹配
  • replace 替換與正則表達式匹配的子串
  • search 檢索與正則表達式相匹配的值
  • split 把字符串分割爲字符串數組

注意:貪婪匹配
須要特別指出的是,正則匹配默認是貪婪匹配,也就是匹配儘量多的字符。舉例以下,匹配出數字後面的0;字符串

var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']

因爲\d+採用貪婪匹配,直接把後面的0所有匹配了,結果0*只能匹配空字符串了。input

必須讓\d+採用非貪婪匹配(也就是儘量少匹配),才能把後面的0匹配出來,加個?就能夠讓\d+採用非貪婪匹配:

var re = /^(\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']
相關文章
相關標籤/搜索