首頁  >  文章  >  web前端  >  正規表示式小結(實戰歸納)

正規表示式小結(實戰歸納)

php中世界最好的语言
php中世界最好的语言原創
2018-03-30 13:42:241430瀏覽

這次帶給大家正規表示式小結(實戰歸納),使用正規表示式實戰的注意事項有哪些,下面就是實戰案例,一起來看一下。

正規表示式就是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)所組成的文字模式。此模式描述在尋找文字主體時待符合的一個或多個字串。正規表示式作為一個模板,將某個字元模式與所搜尋的字串進行比對。

下面小編給大家總結了些關於正規表示式知識點,具體內容如下所示:

1、元字元

#  [擁有特殊意義的元字元]
  \d -> 匹配一個0-9的數字,相當於[0-9],和它相反的是\D ->匹配一個除了0-9的任意字元
  \w -> 匹配一個0-9、a-z、A-Z、_的數字或字元,相當於[0-9a-zA-Z_]
  \s -> 匹配一個空白字元(空格、製表符...)
  \b -> 匹配一個單字的邊界
  \t -> 匹配一個製表符
  \n -> 匹配一個換行
  . -> 匹配一個除了\n以外的任意字符
  ^ -> 以某一個元字符開頭
  $ -> 以某一個元字符結尾
#  \ -> 轉移字符
  x|y -> x或y的一個
  [xyz] -> x、y、z中的任一個
  [^xyz] -> 除了xyz中的任一個字符
  [a-z] -> 符合a-z中的任一個字元
  [^a-z] -> 符合除了a-z中的任一個字元
  () -> 正規中的分組

  注意:

  1)關於[]

    a、[+] ->中括號中出現的所有字元都代表的是本身的意思
    b、[12-65] ->這不是12-65而是1/2-6/5三者中的一個

  2)關於()

    a、分組的作用是改變預設的優先權,例如:/^18|19$/,181、189、119、819、1819...都符合,而不是我們認為的18或19,但改成/^(18|19)$/就是單純的18或19了
    b、可以在捕獲大正則匹配的內容同時,把分組匹配的內容也進行捕獲->分組捕獲
c、分組引用,例如:/^(\d)(\w)\2\1$/,這裡的\2是和第二個分組出現一模一樣的內容,\1是和第一個分組出現一模一樣的內容,例如:"0aa0"就符合了

  [代表數量的量詞元字元]

  * -> 0到多個
  + -> 1到多個
  ? -> 0到1個
  {n} -> 出現n次
  {n,} -> 出現n到多次
  {n,m} -> 出現n到m次

  注意:

  1)關於?的幾種情況

    a、放在非量詞元字元後面,代表出現0-1次
    b、放在量詞元字元後面,代表取消捕獲時候的貪婪性,例如:reg=/\d+/; reg.exec("2015") -> "2015" 但是如果正規這樣寫reg=/\d+?/; reg.exec("2015") -> "2"
    c、在分組開頭加?:,代表當前的分組只是匹配不進行捕獲,例如:/^ (?:\d+)$/
    d、在分組開頭加?=,正向預查,例如:/^abcdef(?=1|2)$/ 只有"abcdef1"和"abcdef2"才符合
    e、在分組開頭加?!,負向預查,例如:/^abcdef(?!1|2)$/ 除了"abcdef1"和"abcdef2"不符合,其他的只要是"abcdef(任何的東西)"都符合

  [代表本身意思的元字符]

  除了以上的,在字面量方式中,我們出現的其他任意字符代表的都是自己本身的意思

  var num=12;
  var reg=/^\w"+num+"$/; ->這裡"+num+"不是把變數的值拼接,而這裡的不管是"還是+都是元字元

  ->對於需要拼接字串和變數的方式我們只能使用實例方式建立正規則

2、修飾符

  i -> ignoreCase 忽略字母的大小寫
  g -> global 全域匹配(加上g可以解決正則捕獲時候的懶惰性)
  m -> multiline 多行匹配

3、專案中常用的正規

  1)有效數字的

var reg=/^[+-]?(\d|([1-9]\d+))(\.\d+)?$/;

  2)信箱的

 var reg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;

  3)電話的

 var reg = /^1\d{10}$/;

  4)年齡在18-65之間的

 var reg = /^((18|19)|([2-5]\d)|(6[0-5]))$/;

  5)中文姓名

 var reg = /^[\u4e00-\u9fa5]{2,4}$/;

  6)身分證

 var reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(?:\d|X)$/;
 //-> 12828(省市县) 1990(年) 12(月) 04(日) 06 1(奇数是男偶数是女) 7(数字或者X)

4、正規的符合

  reg.test([string]) ->true就是符合成功  false->符合不成功

5、正規的捕獲

  1)reg.exec([string])

    -> 首先去配對,符合成功在捕獲,返回的是一個數組; 如果匹配不成功返回的是null;
    -> 正則的捕獲即懶惰又貪婪
    -> 解決懶惰性在正則的末尾增加全局修飾符g
    -> 解決貪婪性在量詞後面加?

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

正規的模式修飾符使用詳解

在正規表示式中有哪些新增特性

以上是正規表示式小結(實戰歸納)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn