原出處: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/