正則表達式

原出處:http://blog.csdn.net/u013142781

(1)爲什麼很多JavaScript正則表達式串都是以“/”開頭並且以“/”結尾?

其實這是一種正則表達式的隱式構造方式.

在JavaScript裏面,一般有兩種構造方式

1、用兩斜槓將正則表達式夾在中間。 
例:var reg = /\w+/;

2、使用new來創建。 
例:var reg = new RegExp(“\\w+”); 
注意:這裏的\\w是雙斜槓,因爲\本來就是字符串的轉義字符,這裏就經過了兩次轉義了。

第二種是正則對象的顯式構造方法。

因此,如果你採用顯式構造方法一定記得把前後的/去掉哦,不然,哼。

(2)爲什麼很多JavaScript正則表達式串都用^和$包含着正則表達式串

因爲^ 和 $ 語言元素與輸入字符串的開頭和結尾匹配。 
^表示必須以什麼開頭 
$表示必須以什麼結尾

^表示必須以什麼開頭,這個好理解,關於$我們看下面的例子:

如我們想匹配以1開頭,後面跟着10數字(類似與手機號的弱驗證) 
那麼我們正則表達式串可以這樣:^[1][\d]{10}$ 
如果我們校驗字符串爲: 
14564564564564654654654564654 //不匹配 
14564564564 //匹配

如果我們把正則表達式最後面的$去掉:^[1][\d]{10}, 
結果是這樣: 
14564564564564654654654564654 //匹配 
14564564564 //匹配

如圖:

這裏寫圖片描述


這裏寫圖片描述


這裏寫圖片描述

(3)正則表達式除了用來驗證下手機號碼、身份證號碼,還能幹什麼?

正則表達式的用途

1、數據驗證,例如,可以測試輸入字符串,以查看字符串內是否出現電話號碼模式或信用卡號碼模式。這稱爲數據驗證。

2、替換文本,可以使用正則表達式來識別文檔中的特定文本,完全刪除該文本或者用其他文本替換它。

3、基於模式匹配從字符串中提取子字符串,可以查找文檔內或輸入域內特定的文本。

關於,數據驗證,沒什麼好說的,就是平時那些js驗證手機號啊,郵箱啊什麼的,這裏就不說了。

下面關於提取子字符串和替換文本,我們以Java爲例,爲什麼是Java?誰讓Java是世界上最好的語言呢!是它,就是它,咳咳,客觀請看:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRegex {
    public static void main(String[] args) {
        //把   第“數字"條  全部查找出來然後換成   小寶鴿
        String regex = "第[0-9]*條";
        String str = "第9條,數據錯誤,錯誤信息,第jjj哦條哦條我的條件如何?第221條xx";
        System.out.println(str);
        Pattern pat = Pattern.compile(regex);
        Matcher matcher = pat.matcher(str);
        while (matcher.find()) {
            String temp = str.substring(matcher.start(), matcher.end());
            str = str.replaceAll(temp, "小寶鴿");
        }
        System.out.println(str);

        //直接替換了
        str = "第9條,數據錯誤,錯誤信息,第jjj哦條哦條我的條件如何?第221條xx";
        System.out.println(str);
        str = str.replaceAll(regex, "小寶鴿");
        System.out.println(str);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

提取子字符串和替換文本的例子都在上面的例子代碼裏面體現啦

運行結果:

這裏寫圖片描述

(4)正則表達式內容不少,想要短時間全部掌握不可能,入門需要學習哪些呢?

下面,我們先簡單瞭解下這些語法: 
字符匹配:

字符 描述
\d 匹配數字(0~9)
\D 匹配非數字
\w 匹配任意單字符
\W 匹配非單字符
\s 匹配空白字符
\S 匹配非空字符
. 匹配除換行符 \n之外的任何單字符。
[…] 匹配括號中任意字符
[^…] 匹配非括號字符

重複匹配:

字符 描述
{n} 匹配n次字符
{n,} 匹配n次和n次以上
{n,m} 匹配n次上m次下
? 匹配0或1次
+ 匹配一次或多次
* 匹配0次以上
| 指明兩項之間的一個選擇。要匹配 |,請使用 \|

字符定位:

字符 描述
^ 定位後面模式開始位置
$ 前面模式位於字符串末端
\A 前面模式開始位置
\z 前面模式結束位置
\Z 前面模式結束位置(換行前)
\b 匹配一個單詞邊界
\B 匹配一個非單詞邊界

轉義匹配:

字符 描述
“\”+實際字符 \ . * + ? | ( ) { }^ $
\n 匹配換行
\r 匹配回車
\t 匹配水平製表符
\v 匹配垂直製表符
\f 匹配換頁
\nnn 匹配一個8進制ASCII
\xnn 匹配一個16進制ASCII
\unnnn 匹配4個16進制的Uniode
\c+大寫字母 匹配Ctrl-大寫字母

上面的語法來自於博文:http://www.cnblogs.com/moss_tan_jun/archive/2010/08/15/1800281.html

上面的語法可能有些比較抽象,沒有看懂並沒有關係,日後用到在逐個研究。

瞭解了上面的語法之後我們來看看這些例子:

讓我們開始第一個驗證,輸入的字符在a-g之間?

[a-g]
  • 1

輸入的字符在a-g之間並且長度爲3?

[a-g]{3}
  • 1

輸入的字符在a-g之間並且最大長度爲3最小長度爲1?

[a-g]{1,3}
  • 1

我如何在匹配像91230456, 01237648那樣的固定8位數?

^[0-9]{8}$
  • 1

驗證像INV190203 或 inv820830那樣的前3位是不區分大小寫的英文字母,剩餘8位是數字

在前面的表達式中只能匹配前3個是小寫英文字母的發票編號,如果我們輸入大寫字母那就不能匹配了。所以爲了確保前3個字母是不區分大小寫的,我們就要用表達式^[a-zA-Z]{3}。

完整的正則式如下:

^[a-zA-Z]{3}[0-9]{7}$
  • 1

我們可以驗證簡單的網址URL格式嗎?

第一步:檢查是否存在www:

^www.
  • 1

第二步:域名必須是長度在1-15的英文字母:

.[a-z]{1,15}
  • 1

第三部:以.com或者.org結束:

.(com|org)$
  • 1

完整的表達式如下:

^www[.][a-z]{1,15}[.](com|org)$
  • 1

讓我們在來看看BCD(其實也就是上面說的3條基本語法)如何驗證email格式

第一步:email開始是長度在1-10的英文字母,最後跟一個”@”:

^[a-zA-Z0-9]{1,10}@
  • 1

第二步:@後面是長度在1-10的英文字母,後面跟一個”.”:

[a-zA-Z]{1,10}.
  • 1

第三步:最後以.com或.org結束:

.(com|org)$
  • 1

最後完整的表達式如下:

^[a-zA-Z0-9]{1,10}@[a-zA-Z]{1,10}.(com|org)$
  • 1

以上正則例子出自博文:http://www.cnblogs.com/sxwgf/archive/2011/11/17/2252076.html,該博文還有日期驗證的例子。

上面的一些例子可能看官們能看到懂,但是自己不動手試試,還是不放心,因此下面推薦兩個在線測試正則表達式網站,可以驗證上面的例子!

正則表達式在線測試網站,這兩個網站都可以,挺好用的,但是個人還是推薦前者(雖然界面沒有那麼美觀): 
http://tool.chinaz.com/regex/ 
http://tool.oschina.net/regex/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章