10_javascript內建對象RegExp(正則表達式)

正則表達式RegExp

正則表達式用於定義一些字符串的規則,計算機可以根據正則表達式,
來檢查一個字符串是否符合規則,或者將字符串中符合規則的內容提取出來

創建正則表達式的對象

語法:
	var 變量 = new RegExp("正則表達式","匹配模式");

使用typeof檢查正則對象,會返回object

var reg = new RegExp("a"); 
這個正則表達式可以來檢查一個字符串中是否含有a;

在構造函數中可以傳遞一個匹配模式作爲第二個參數,可以是: 
	i 忽略大小寫 
	g 全局匹配模式

var reg = new RegExp("ab","i");

正則表達式的方法:

test()
使用這個方法可以用來檢查一個字符串是否符合正則表達式的規則,
如果符合則返回true,否則返回false。

var result = reg.test(str);

使用字面量來創建正則表達式

語法:
	var 變量 = /正則表達式/匹配模式

使用字面量的方式創建更加簡單,
使用構造函數創建更加靈活

var reg = new RegExp("a","i");		
var reg = /a/i;
console.log(typeof reg); // object
console.log(reg.test("abc")); // true

// 創建一個正則表達式,檢查一個字符串中是否有a或b
使用 | 表示或者的意思
var reg = /a|b|c/;

// 創建一個正則表達式檢查一個字符串中是否有字母
[]裏的內容也是或的關係
[ab] == a|b
[a-z] 任意小寫字母
[A-Z] 任意大寫字母
[A-z] 任意字母
[0-9] 任意數字
var reg = /[a-Z]/

// 檢查一個字符串中是否含有 abc 或 adc 或 aec
reg = /a[bde]c/;

[^ ] 表示除了
reg = /[^ab]/;
reg = /[^0-9]/;

// 創建一個正則表達式檢查一個字符串中是否含有aaa
var reg = /a{3}/;
量詞
	通過量詞可以設置一個內容出現的次數
	量詞只對它前邊的一個內容起作用
	{n} 正好出現n次
	{m,n} 出現m-n次
	{m,} m次以上
	+ 至少一個,相當於{1,}
	* 0個或多個,相當於{0,}
	? 0個或1個,相當於{0,1}
var reg = /(ab){3}/;
reg = /ab{1,3}c/;
reg = /ab+c/;
reg = /ab*c/;
reg = /ab?c/;

// 檢查一個字符串中是否以a開頭
^ 表示開頭
$ 表示結尾
reg = /^a/; // 匹配開頭的a
reg = /a$/; // 匹配結尾的a

如果在正則表達式中同時使用^ $
則要求字符串必須完全符合正則表達式
reg = /^a$/;//只有一個a符合
// 創建一個正則表達式,用來檢查一個字符串是否是一個合法手機號
手機號的規則:1 3 567890123 (11位)
	1. 以1開頭
	2. 第二位3-9任意數字
	3. 三位以後任意數字9個
		 ^1   [3-9]  [0-9]{9}$  
var phoneStr = "13067890123";
var phoneReg = /^1[3-9][0-9]{9}$/;
console.log(phoneReg.test(phoneStr));//true
檢查一個字符串中是否含有 .
	 . 表示任意字符
	 在正則表達式中使用\作爲轉義字符
		\. 來表示.
		\\  表示\
	 
注意:
使用構造函數時,由於它的參數是一個字符串,
而\是字符串中轉義字符,
如果要使用\則需要使用\\來代替
var reg = /\./;
reg = /\\/;
reg = new RegExp("\\.");
reg = new RegExp("\\\\");

	\w		任意字母、數字、_  [A-z0-9_]
	\W		除了字母、數字、_  [^A-z0-9_]
	\d		任意的數字 [0-9]
	\D		除了數字 [^0-9]
	\s		空格
	\S		除了空格
    \b		單詞邊界
	\B		除了單詞邊界
	
// 創建一個正則表達式檢查一個字符串中是否含有單詞child
reg = /\bchild\b/;
//去除字符串前後空格:						
var str = "    he   llo    ";
去除空格就是使用""來替換空格
str = str.replace(/^\s*|\s*$/g,"");
console.log('result = --'+result+'--')
//"result = --he      llo—"

字符串和正則相關的方法

split()
可以將一個字符串拆分爲一個數組;

方法中可以傳遞一個正則表達式作爲參數,
這樣方法將會根據正則表達式去拆分字符串。

// 根據任意字母來將字符串拆分
var str = "1a2b3c4d5e6f7";
var result = str.split(/[A-z]/);
console.log(result);//"1,2,3,4,5,6,7"
search()
可以搜索字符串中是否含有指定內容,
如果搜索到指定內容,則會返回第一次出現的索引,
如果沒有搜索到返回-1。
它可以接受一個正則表達式作爲參數,
然後會根據正則表達式去檢索字符串。

serach()只會查找第一個,即使設置全局匹配也沒用

str = "hello abc hello aec afc";
// 搜索字符串中是否含有abc 或 aec 或 afc
result = str.search(/a[bef]c/);
console.log(result);//6
match()
可以根據正則表達式,從一個字符串中將符合條件的內容提取出來。
默認情況下我們的match只會找到第一個符合要求的內容,找到以後就停止檢索;
我們可以設置正則表達式爲全局匹配模式,這樣就會匹配到所有的內容;
可以爲一個正則表達式設置多個匹配模式,且順序無所謂。

match()會將匹配到的內容封裝到一個數組中返回,即使只查詢到一個結果。

str = "1a2a3a4a5e6f7A8B9C";
result = str.match(/[a-z]/ig);
console.log(result); // Array(9) ["a", "a", ...]
console.log(result[2]);//a	
replace()
可以將字符串中指定內容替換爲新的內容;

默認只會替換第一個(設置全局匹配模式)

參數:
    1.被替換的內容,可以接受一個正則表達式作爲參數
    2.新的內容
默認只會替換第一個。

str = "1a2a3a4a5e6f7A8B9C";
result = str.replace(/[a-z]/gi , "@_@");
////1@_@2@_@3@_@4@_@5@_@6@_@7@_@8@_@9@_@
console.log(result);
郵件的正則

電子郵件: hello .nihao @ abc .com.cn

/任意字母數字下劃線    .任意字母數字下劃線  @   任意字母數字     .任意字母(2-5位)   .任意字母(2-5位)/
\w{3,}  (\.\w+)*  @  [A-z0-9]+  (\.[A-z]{2,5}){1,2}

var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var email = "[email protected]";
console.log(emailReg.test(email)); // true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章