正則表達式
- 什麼是正則表達式
- 正則表達式的創建
- 正則表達式的語法
- 字符串結合正則表達式的使用(重點)
-
電子郵箱和手機號碼的格式測試
一、什麼是正則表達式
正則表達式用於定義一些字符串的規則,計算機可以根據正則表達式,來檢查一個字符串是否符合規則,獲取將字符串中符合規則的內容提取出來。
二、正則表達式的創建
①創建正則表達式的對象:
語法: var 變量 = new RegExp("正則表達式" , ["匹配模式"]);
②以字面量來創建正則表達式:
語法:var reg=/正則表達式/[匹配模式];
匹配模式:
- i 忽略大小寫
- g 全局匹配模式
var str1="hello world";
var str2="abcde";
var str3="A";
//創建正則表達式
var reg = new RegExp("a","i");
//或者var reg = /a/i;
document.write(reg); //返回/a/
document.write(typeof reg); //返回object
// 正則表達式的方法reg.test()
result = reg.test(str1); //返回false
document.write(result);
result = reg.test(str2); //返回true
document.write(result);
result = reg.test(str3); //返回true
document.write(result);
三、正則表達式的語法
/*基礎
- /x/ 存在x
- []裏的內容是或的關係
- [ab] == a|b
- [a-z] 任意小寫字母
- [A-Z] 任意大寫字母
- [A-z] 任意字母
- [^] 除了^後面的內容
- [0-9] 任意數字
- [a-b] 數字a到數字b之間的任意數字
- ......
*/
var reg = "";
reg = /a/ //存在a
reg = /a|b/; //a或b
reg = /[ab]/; //a或b
reg = /[a-z]/; //任意小寫字母
reg = /[A-Z]/; //任意大寫字母
reg = /[A-z]/; //任意字母
reg = /[0-9]/; //任意數字
reg = /[^ab]/; // 除了^後面的內容
/*量詞
- a{n} a正好出現n次
- (ab){n} ab正好出現n次
- ax{n}b a和b之間的x存在不止n次
- ac{x,y}b a和b之間的c出現x到y次,包括x和y
- ac{x,}b a和b之間的c出現至少x次,包括x
- ac+b +代表至少出現一個,a和b之家的c至少出現一次
- ac*b *代表出現0或多個 [零,正無窮]
- ac?b ?代表出現0或1次 [0,1]
- ^a ^表示開頭,檢查字符串是否以a開頭
- a$ $表示結尾,檢查字符串是否以a結尾
- ^a$ a即是開頭,也是結尾 (正則表達式中同時使用^$則要求字符串必須完全符合正則表達式)
- ^a|a$ 以a開頭或以a結尾
*/
var reg="";
reg = /a{n}/ //a正好出現n次
reg = /(ab){n}/ //ab正好出現n次
reg = /ax{n}b/ //a和b之間的x存在不止n次
reg = /ac{x,y}b/ //a和b之間的c出現x到y次,包括x和y
reg = /ac{x,}b/ //a和b之間的c出現至少x次,包括x
reg = /ac+b/ //+代表至少出現一個,a和b之家的c至少出現一次
reg = /ac*b/ //*代表出現0或多個 [零,正無窮]
reg = /ac?b/ //?代表出現0或1次 [0,1]
reg = /^a/ //^表示開頭,檢查字符串是否以a開頭
reg = /a$/ //$表示結尾,檢查字符串是否以a結尾
reg = /^a$/ //a即是開頭,也是結尾
reg = /^a|a$/ // 以a開頭或以a結尾
reg = /^a|a$/ //以a開頭或以a結尾
例:創建一個正則表達式,檢查一個字符串是否是一個合法手機號
---手機號規則:
-1 3-9 123456789 一共11位數字
-1、以1開頭
- 2、第二位爲3-9任意數字
-3、三位以後任意數字9個
僞代碼:^1 [3-9] [0-9]{9}$
var reg = /^a[3-9][0-9]{9}$/;
alert(reg.test("13920325468"));
/*檢查字符串是否含有.
.在正則表達式中表示任意字符
在正則表達式中使用\作爲轉義字符
\\表示\
\.表示.
- . 任意字符
- /\./ 含有.
注意:正則表達式的構造函數的參數是字符串,要想使用\,則需對其轉義\\後,才能輸出\\.
*/
var reg1 = /\./; //含有.
var reg2 = new RegExp("/\\./");
alert(reg1.test("sa.21xas"));
alert(reg2.test("sa21xas"));
/*元符號
- 擁有特殊含義的字符
- \w - 任意字母、數字和下劃線_ - [A-z0-9_]
- \W - 除了字母、數字和下劃線之外的字符 - [^A-z0-9_]
- \d - 任意的數字 - [0-9]
- \D - 除了數字 -[^0-9]
- \s - 空格 -
- \S - 除了空格 -
- \b - 單詞邊界 \b單詞\b -
- \B - 除了單詞邊界 -
var w = /\w/;
var W = /\W/;
var d = /\d/;
var D = /\D/;
var s = /\s/;
var S = /\S/;
var b = /\bword\b/;
var B = /\Bword\B/;
例:取名字,自動去除空格
1、去除開頭和結尾的空格
var str = prompt("請輸入名字:");
//去除開頭的空格
result = str.replace(/^\s*/ , "");
//去除結尾的空格
result = str.replace(/\s*$/,"");
//合併 去除結尾和開頭的空格
result = str.replace(/^\s*|\s*$/g,"");
//測試結果是否相同
alert(result == str);
2、去除所有空格
var str = prompt("請輸入名字:");
//去除所有空格
result = str.replace(/\s/g , "");
//測試結果是否相同
alert(result == str);
四、字符串結合正則表達式的使用(重點)
支持正則表達式的String對象方法(字符串)
- split()
- search()
- match()
- replace()
1、split()方法
- 該方法將一個字符串拆分成一個數組
- 方法中可以傳遞一個正則表達式作爲參數,這樣方法將會根據正則表達式去拆分字符串
- 不需要設置全局匹配g,也會全部都拆分
例:根據任意字母拆分字符串
var str = "1a2b3c4d5e";
var result = str.split(/[A-z]/); //根據任意字母拆分字符串
document.write(result);
2、search()方法
- 可以搜索字符串中是否含有指定內容,有則返回指定內容的第一個值的索引值,無則返回-1
- 可以接受一個正則表達式作爲參數,根據正則表達式去檢索字符串
- 全局匹配g對該方法無效,只會返回第一個結果
例:搜索字符串中是否含有abc或aec或afc
var str = "avc aec dcs dsf";
result = str.search(/a[bef]c/); //搜索字符串中是否含有abc或aec或afc
document.write(result);
3、match()方法(可用於爬取信息)
- 可以根據正則表達式,從一個字符串中將符合條件的內容提取出來,將結果保存在數組裏
- 默認情況下match只會找到第一個符合要求的內容,找到就停止檢索
- 設置正則表達式爲全局匹配模式g,就會匹配所有的內容
例:提取字符串中的所有字母
var str = "1a2b3c4d5e6fg";
result = str.match(/[A-z]/); //提取字符串中的第一個字母
result = str.match(/[A-z]/g); //提取字符串中的所有字母
document.write(result);
4、replace()方法
- 可以將字符串中指定內容替換爲新的內容,默認只會替換符合要求的第一個
- replace(a,b) 參數a->被替換內容,參數b->新內容
例:替換字符串中的所有a爲@
var str = "1aadacafdfwfcsdve2134fsdasfwe";
result = str.replace(/a/,"@"); //只有第一個a被替換
result = str.replace(/a/g,"@"); //所有a被替換
document.write(result);
五、電子郵箱和手機號碼的格式測試
正則表達式 電子郵箱和手機號碼的格式測試https://blog.csdn.net/qq_41604269/article/details/83576875