正则

//正则:就是以个规则 用来处理字符串的一个规则

var reg =/\d/;

reg.exec("1"); //匹配符合的

//2如何创建一个正则

//字面量方式:

var reg = /\d/;

//实例创建方式:

var reg = new RegExp("");

//元字符

每一个正则表达式都是由元字符和修饰符组成的

元字符在 // 之前具有意义的一些字符

\: 转义 字符, 转义后面字符所代表的含义

^: 某一个元字符开始

$:某一个元字符结尾

//代表出现次数的量词元字符

*:出现零到多次

+:出现1到多次

?:出现零次 或者一次

{n}: 出现n次

{n,}: 出现n到多次

{n,m}: 出现 n到 m次

\n :匹配一个换行符

. : 除了\n以外的任意字符

一个简单的验证手机号的正则:11位数字,第一位是1

var reg = /^1\d{10}$/

():分组 - >把一个大正则本身划分成几个小的正则

1)改变默认的优先级

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之间的数字 \D:除了0-9之间的以外的任何字符

\b:一个边界符

\w:数字 字母 下划线中的任意一个字符[0-9a-zA-Z_]

\s :匹配一个空白字符 空格 一个制表符 换页符

g    (global)       全局匹配(会查找所有匹配,不会在查找到第一个匹配时就停止)改变了lastIdex的值到最新

i     (ignoreCase)       执行对大小写不敏感的匹配

m     (multiline)     执行多行匹配

在中括号[ ] 出现的所有字符都是代表本身意思的字符 没有特殊含义

1) 有效数字的正则

"."可以出现也可以不出现,但是一旦出现,后面必须跟着一位或者多为数字   .

也就是说”[]”代表的是一个字符集,”^”只有在字符集中才是反向字符集的意思

[] 中括号中不识别两位数 var reg = /^[12]$/; 1 or 2

var reg = /^[12-68]$/  1, 2-6中的一个, 8 三个中的一个

字面量方式和实例创建的方式在正则中的区别?

1.字面量方式中出现的一切都是元字符,所以不能进行变量值的拼接,而实例方式可以

2.字面量方式中直接写\d就可以, 而在实例中需要把它转义\\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}$/;

中国标准真是姓名 2-4位汉字 :  var reg = /^[\u4e00 - \u9fa5]{2,4}$/i

身份证号码 : var reg = /^\d{17} (X| \d)$/ (根据身份证号码提取信息)

正则的捕获 var reg = /^(\d{2})(\d{4})$/

reg.exec ->正则的捕获

1.捕获到得内容是一个数组

【捕获的字符 ,index:开始位置,  input 原始字符】

2. 正则的懒惰性

捕获第一个匹配的

lastindex 是正则每一次捕获在的位置,默认值是0

var ary=[];

var res =  reg.exec(str);

while(res){

ary.push(res[0]);

res = reg.exec(str);

}

3.正则的贪婪性

我们默认捕获 符合最长的字符串

在量词后面加一个?

?的不同作用

放在一个普通的元字符后面代表出现0-1次 /\d?/

房子啊一个量词的元字符后面是取消捕获贪婪性/\d+?/

字符串中的match

var ary = str.match(reg);

match一次性捕获所有成一个数组 match虽然比exec简单,但是在分组捕获的情况下,match只能匹配到大正则的, 捕获不到小正则.

正则的分组:

var reg = /^(\d{2})(\d{4})(\d{4})(?:\d{2})(\d{2})(\d{2})$/

1.改变优先级

2.分组引用 var = /^(\w)\1(\w)\2$/  \1和第一个正则一模一样  \2和第二个正则一模一样

(?:)在分组中的意思是只匹配不捕获

replace:把原有的字符替换成新的字符

在不使用正则的情况下,每当执行一次只能替换一个字符

str = str.replace(/zhufeng/g,"zhufengpeixun")

str = str.replace (/zhufeng/g, function(){

console.log(arguments[0]);  // 每一次执行匿名函数捕获到的内容

return "zhufengpeixun" //返回的内容把每次大正则匹配捕获的内容都替换了

})

匿名函数的arguments 和 exec得到的数组是非常类似的,也同样可以得到分组的正则的内容

arguments[1] 获取每一次执行匿名函数我们正则捕获的第一个分组中的内容

RegExp.$1 获取第一个分组捕获的内容

正则的捕获: 正则的exec方法,字符串的match方法,字符串的replace方法

arguments[0] --> exec 捕获的组的第一项

arguments[1] --> exec捕获数组的index

arguments[2] --> exec捕获组的input内容

//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"

//如果现在要获取id,正则表达式怎么写?

//value值的表示方法 ([^;]*) 除了分号之外的任意字符重复任意次数

//结尾符号的判断(;|$)

var cookie = "id=123; username=yang; sex=1";

var reg4 = /(^| )id=([^;]*)(;|$)/;//匹配某个cookie的正则

var arr = cookie.match(reg4);//match方法发挥数组

console.log(arr[2]);

//获取usernama对应的值

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]);//数组中的第二个是就是 第二个分组对应的值

//获取某个cookie对应的cookie

function getCookie(key) {

var str = "(^| )" + key + "=([^;])(;|$)";//[,,,]

var reg = new RegExp(str);

if (!arr)//arr数组为null match没有在字符串中找到该cookie

{

return null;

}

return arr[2];//只需要数组中索引为2的值

}

document.cookie = "username=yang;";

document.cookie = "id=123";

alert(getCookie("color"));

alert(getCookie("username"));

你可能感兴趣的:(正则)