//正則:就是以個規(guī)則 用來處理字符串的一個規(guī)則
var reg =/\d/;
reg.exec("1"); //匹配符合的
//2如何創(chuàng)建一個正則
//字面量方式:
var reg = /\d/;
//實例創(chuàng)建方式:
var reg = new RegExp("");
//元字符
每一個正則表達(dá)式都是由元字符和修飾符組成的
元字符在 // 之前具有意義的一些字符
\: 轉(zhuǎn)義 字符, 轉(zhuǎn)義后面字符所代表的含義
^: 某一個元字符開始
$:某一個元字符結(jié)尾
//代表出現(xiàn)次數(shù)的量詞元字符
*:出現(xiàn)零到多次
+:出現(xiàn)1到多次
?:出現(xiàn)零次 或者一次
{n}: 出現(xiàn)n次
{n,}: 出現(xiàn)n到多次
{n,m}: 出現(xiàn) n到 m次
\n :匹配一個換行符
. : 除了\n以外的任意字符
一個簡單的驗證手機(jī)號的正則:11位數(shù)字,第一位是1
var reg = /^1\d{10}$/
():分組 - >把一個大正則本身劃分成幾個小的正則
1)改變默認(rèn)的優(yōu)先級
var reg = /^18 |19$/ ? ? ? //189 ? ?119 ? 19?
var reg = /^(18 |19)$/ ? ? //18 19
2)
var reg = /^(\d+)abc(\d+)$/
x|y: x 或者y中的一個
[xyz] : x或則y或則z中的一個
[^xyz]: 除了三個以外的任何一個字符
[a-z]:a-z中間的任意一個字符
[^a-z]:除了a-z中的任意一個字符
\d: 一個0-9之間的數(shù)字 \D:除了0-9之間的以外的任何字符
\b:一個邊界符
\w:數(shù)字 字母 下劃線中的任意一個字符[0-9a-zA-Z_]
\s :匹配一個空白字符 空格 一個制表符 換頁符
g ? ?(global) ? ? ? 全局匹配(會查找所有匹配誓竿,不會在查找到第一個匹配時就停止)改變了lastIdex的值到最新
i ? ? (ignoreCase) ? ? ? 執(zhí)行對大小寫不敏感的匹配
m ? ? (multiline) ? ? 執(zhí)行多行匹配
在中括號[ ] 出現(xiàn)的所有字符都是代表本身意思的字符 沒有特殊含義
1) 有效數(shù)字的正則
"."可以出現(xiàn)也可以不出現(xiàn),但是一旦出現(xiàn),后面必須跟著一位或者多為數(shù)字 ? .
也就是說”[]”代表的是一個字符集烤黍,”^”只有在字符集中才是反向字符集的意思
[] 中括號中不識別兩位數(shù) var reg = /^[12]$/; 1 or 2
var reg = /^[12-68]$/ ?1, 2-6中的一個, 8 三個中的一個
字面量方式和實例創(chuàng)建的方式在正則中的區(qū)別嫂丙?
1.字面量方式中出現(xiàn)的一切都是元字符规哲,所以不能進(jìn)行變量值的拼接唉锌,而實例方式可以
2.字面量方式中直接寫\d就可以, 而在實例中需要把它轉(zhuǎn)義\\d
age between 18~65 : var reg = /^(1[8-9] | [2-5]\d | 6[0-5])$/
verify email : var reg = /^[\w.-]+@[0-9a-zA-Z]+(\.[a-zA-z]{2,4}){1,2}$/;
中國標(biāo)準(zhǔn)真是姓名 2-4位漢字 : ?var reg = /^[\u4e00 - \u9fa5]{2,4}$/i
身份證號碼 : var reg = /^\d{17} (X| \d)$/ (根據(jù)身份證號碼提取信息)
正則的捕獲 var reg = /^(\d{2})(\d{4})$/
reg.exec ->正則的捕獲
1.捕獲到得內(nèi)容是一個數(shù)組
【捕獲的字符 腥放,index:開始位置绿语, ?input 原始字符】
2. 正則的懶惰性
捕獲第一個匹配的
lastindex 是正則每一次捕獲在的位置,默認(rèn)值是0
var ary=[];
var res = ?reg.exec(str);
while(res){
ary.push(res[0]);
res = reg.exec(str);
}
3.正則的貪婪性
我們默認(rèn)捕獲 符合最長的字符串
在量詞后面加一個种柑?
匹耕?的不同作用
放在一個普通的元字符后面代表出現(xiàn)0-1次 /\d?/
房子啊一個量詞的元字符后面是取消捕獲貪婪性/\d+?/
字符串中的match
var ary = str.match(reg);
match一次性捕獲所有成一個數(shù)組 match雖然比exec簡單稳其,但是在分組捕獲的情況下炸卑,match只能匹配到大正則的煤傍, 捕獲不到小正則.
正則的分組:
var reg = /^(\d{2})(\d{4})(\d{4})(?:\d{2})(\d{2})(\d{2})$/
1.改變優(yōu)先級
2.分組引用 var = /^(\w)\1(\w)\2$/ ?\1和第一個正則一模一樣 ?\2和第二個正則一模一樣
(?:)在分組中的意思是只匹配不捕獲
replace:把原有的字符替換成新的字符
在不使用正則的情況下,每當(dāng)執(zhí)行一次只能替換一個字符
str = str.replace(/zhufeng/g,"zhufengpeixun")
str = str.replace (/zhufeng/g, function(){
console.log(arguments[0]); ?// 每一次執(zhí)行匿名函數(shù)捕獲到的內(nèi)容
return "zhufengpeixun" //返回的內(nèi)容把每次大正則匹配捕獲的內(nèi)容都替換了
})
匿名函數(shù)的arguments 和 exec得到的數(shù)組是非常類似的,也同樣可以得到分組的正則的內(nèi)容
arguments[1] 獲取每一次執(zhí)行匿名函數(shù)我們正則捕獲的第一個分組中的內(nèi)容
RegExp.$1 獲取第一個分組捕獲的內(nèi)容
正則的捕獲: 正則的exec方法,字符串的match方法,字符串的replace方法
arguments[0] --> exec 捕獲的組的第一項
arguments[1] --> exec捕獲數(shù)組的index
arguments[2] --> exec捕獲組的input內(nèi)容
//queryURLParameter
var str = "http://kbs.sports.qq.com/kbsweb/game.htm?mid=10000&cid=1467086&app=1.0";
var reg=/([^?&=]+)=([^?&=]+)/g;
var obj={};
// var res = reg.exec(str);
// while(res){
// obj[res[1]] = res[2];
// res =? reg.exec(str);
// }
str.replace(reg,function(){
obj[arguments[1]] =arguments[2];
});
console.log(obj);
cookie = "id=123; username=yang; id=123; sex=1"
//如果現(xiàn)在要獲取id椅寺,正則表達(dá)式怎么寫蒋失?
//value值的表示方法 ([^;]*) 除了分號之外的任意字符重復(fù)任意次數(shù)
//結(jié)尾符號的判斷(;|$)
var cookie = "id=123; username=yang; sex=1";
var reg4 = /(^| )id=([^;]*)(;|$)/;//匹配某個cookie的正則
var arr = cookie.match(reg4);//match方法發(fā)揮數(shù)組
console.log(arr[2]);
//獲取usernama對應(yīng)的值
var reg5 = /(^| )username=([^;]*)(;|$)/;//獲取username的值
var arr2 = cookie.match(reg5);
console.log(arr2);//如果match方法沒有找到就會返回null [" username=yang;", " ", "yang", ";", index: 7, input: "id=123; username=yang; sex=1"]
console.log(arr2[2]);//數(shù)組中的第二個是就是 第二個分組對應(yīng)的值
//獲取某個cookie對應(yīng)的cookie
function getCookie(key) {
var str = "(^| )" + key + "=([^;])(;|$)";//[,,,]
var reg = new RegExp(str);
if (!arr)//arr數(shù)組為null match沒有在字符串中找到該cookie
{
return null;
}
return arr[2];//只需要數(shù)組中索引為2的值
}
document.cookie = "username=yang;";
document.cookie = "id=123";
alert(getCookie("color"));
alert(getCookie("username"));