07-JS中正则表达式的应用

概述

  • 正则表达式(英语:Regular Expression);
  • 本质:用来记录文本规则的代码(为字符串定义规则,为输入内容定义规则!);
  • 应用非常广泛,如:表单验证、高级搜索、生化科学(有一定难度,不要求非常熟练,但至少会表单验证)。
  • 应用:表单验证;隐藏手机号码:152****8563;可以通过正则表达式,从字符串中获取我们想要的特定部分。

正则表达式的特点:

  • 灵活性、逻辑性和功能性非常的强;
  • 可以迅速地用极简单的方式达到字符串的复杂控制;
  • 对于刚接触的人来说,比较晦涩难懂。
    比如:
  • 匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7};
  • 验证手机号:/^((13[0-9])|(15[^4,\D])|(18[0,5-9]))\d{8}$/;很难记住。

正则表达式声明

  • 通过构造函数定义
var 变量名= new RegExp(/表达式/);
  • 通过字面量定义(较为常用)
var reg = /表达式/;
console.log(reg);   //是对象类型
console.log(reg.test(345));
console.log(/\d/.test(567));(直接使用)
  • 正则表达式的组成是:(总结)
    • 有一些普通字符元字符组成,普通字符就是字母和数字,元字符是具有特殊意义的字符。
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
比如  \d
预定义类: 表示数字   [0-9]

test() 方法

  • 正则对象方法,检测测试字符串是否符合该规则,返回true和false,参数(待测试的字符串)
  • 使用语法:
Boolean = 表达式.test("要验证的内容");
  • 如:
console.log(/\d/.test(567));
验证  567 符不符合 \d 的规范

正则内部类(五种)(帮我们写好的工具直接使用)

预定义类
符号 含义 说明
.(点) ^$\t 除了 换行 和 回车 之外的任意字符(“”不行,即非空不行)
\d [0-9] 数字字符
\D [ ^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白字符(空格、回车、tab...)
\S [ ^\t\n\x0B\f\r] 非空白字符
\w [a-zA-Z_0-9] 单词字符
\W [ ^a-zA-Z_0-9] 非单词字符
console.log(/./.test("\t"));    //true
console.log(/./.test("\r"));    //false
console.log(/./.test("$"));     //true
简单类(正则://中什么特殊符号都不写,和[]的加入)
  • 第一种情况:必须包含完整的(一模一样的)才返回true

  • /string/.test(“string”);:必须是完整的,只多不能少;

  • /andy/.test(“andy”); // true

  • /andy/.test(“andylv”); // true

  • /andy/.test(“an”); // false

  • /abc/.test("bca"); //false

  • 第二种情况:只要包含里面的任何一个就可以

  • /[string]/.test(“string”); //true

  • /[andy]/.test("andy"); // true

  • /[andy]/.test("an"); // true

  • /[andy]/.test("ady"); // true

  • /[andy]/.test("anll"); // true

  • /[andy]/.test("assd"); // true

  • /[andy]/.test("ss"); // false

  • /[3aH8]/.test("ss"); // false

负向类(不能是其中的整体或者一部分)
  • 中括号内,前面加个元字符^进行取反,不可以全部由括号里面的字符构成;如果有一个字符在中括号内找不到就返回true;否则就返回fanse。
console.log(/[^abc]/.test("a"));  //false
console.log(/[^abc]/.test("abc"));  //false
console.log(/[^abc]/.test("cbabc"));   //false
console.log(/[^abc]/.test("abcd"));    //true
console.log(/[^abc]/.test("gg"));   //true
  • 注意: 这个符号^,一定是写到方括号里面。
范围类
  • 有时匹配的东西过多,而且类型又相同,全部输入太麻烦,我们可以在中间加了个横线;
console.log(/[a-z]/.test('1111'));  //false
console.log(/[A-Z]/.test('aa'));    //false
组合类
  • 用中括号匹配不同类型的单个字符。
console.log(/[a-m1-5]/.test("b"))   //true
console.log(/[a-z1-5]/.test("12aa32a123"));  //true

正则边界重点

  • ^:会匹配行或者字符串的起始位置;
  • :^在[]中才表示非!这里表示开始;
  • $:会匹配行或字符串的结尾位置;
  • ^$在一起,表示必须是这个(精确匹配);
// 边界可以精确说明要什么
console.log(/lily/.test("lilyname")); // true
console.log(/^lily$/.test("lily"));  // true
console.log(/^lily$/.test("ly"));   // false
console.log(/^andy$/.test("andy"));  // true这个的最终意思就是 说, 必须是 andy 这四个字母

量词重点

  • 多个字母,重复最后一个
  • *(贪婪):重复零次或更多(>=0);
  • +(懒惰):重复一次或更多次(>=1);
  • ?(占有):重复零次或一次(0||1),要么有,要么没有;
  • {}:重复多少次的意思,可以有多少个,如:您的银行卡密码只能是6位:{6};
  • {n}:n次(x=n);
  • {n,}:重复n次或更多 (x>=n);
  • {n,m}:重复出现的次数比n多但比m少 (n<=x<=m);
符号 说明
* {0,}
+ {1,}
? {0,1}
() 提高权限,有限计算
  • x|y,表示x或者y(没有&,用的是,代替的)
console.log(/^a*$/.test("a"));  //true
console.log(/^a*$/.test(""));   //true
console.log(/^a*$/.test("d"));  //false
console.log(/^a*$/.test("aa")); //true
console.log(/^a*$/.test("aaaaaa")); //true
常用的正则表达式
1.验证QQ号:/^[1-9][0-9]{4,}$/
2.验证手机号:/^((13[0-9])|(15[^4,\D])|(18[0-9]))\d{8}$/
3.验证邮箱:/^[\w\-\.]+\@[\w]+\.[\w]{2,4}$/
4.验证座机号:/^0\d{2}-\d{8}$|^0\d{3}-\d{7}$/
5.验证用户名:/^[a-zA-Z0-9_-]{3,16}$/
6.验证密码:/^[\$a-zA-Z0-9_-]{6,18}$/
  • 匹配密码强度
/^([a-z].*[A-Z])|([A-Z].*[a-z])$/
区分大小写英文字母

/^([a-z].*[0-9])|([A-Z].*[0-9])|[0-9].*[a-zA-Z]$/
带有字母 和 数字

/^[A-Za-z0-9]+[_$][A-Za-z0-9]*$/
字母数字中间 加有下划线(想要什么中括号中加)
案例:
  • 匹配座机号
var regexp  = /^(0\d{2}-\d{8})|(0\d{3}-\d{7})$/;
var demo    = /^0\d{2}-\d{8}$|^0\d{3}-\d{7}$/;
  • 匹配中文
(     /^[\u4e00-\u9fa5]{2,4}$/     )
  • 匹配验证表单(注册QQ)

三个函数

replace 函数
  • replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
  • 语法格式:(返回值是新字符串)
str2 = str1.replace(正则式/字符串,替换的目标字符)
str2 = str1.replace(/需要替换的/ig,'替换成');
  • i:忽略大小写;

  • g:全局替换。

  • 正则表达式的匹配模式支持的2个标志

  • g:表示全局模式(global),即模式将被应用于所有字符串而非发现一个而停止;

  • i:表示不区分大小写(ease-insensitive)模式,在确定匹配想时忽略模式与字符串的大小写

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

推荐阅读更多精彩内容

  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 3,979评论 0 20
  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,131评论 0 9
  • 温馨提示:文章很长很长,保持耐心,必要时可以跳着看,当然用来查也是不错的。 正则啊,就像一座灯塔,当你在字符串的海...
    Stinson阅读 4,303评论 2 82
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,559评论 18 139
  • 困...上班路上,不要传负能量给我,也许自己找个理由就请假了。我想坚持自己,相信的走下去
    静静同行阅读 277评论 0 0