正则

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

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"));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • --------------------------正则的作用--------------------------...
    G_whk阅读 608评论 1 5
  • 一、正则初体验 在软件开发中,不管是Java、C#、JS、OC....基本上都会接触到正则,不过大多数人都对正则并...
    iceman_dev阅读 2,636评论 9 28
  • 正则 1.什么是正则:用来操作字符串的规则; 正则就是用来操作(校验,捕获)“字符串”的 1)校验:返回布尔值 t...
    web前端ling阅读 559评论 0 0
  • 定义:用来处理字符串的规则 1、匹配:判断一个字符串是否符合我们制定的规则->test:reg.test(str)...
    RomainLiu阅读 629评论 0 0
  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 3,981评论 0 20