JS中RegExp的应用与实战案例

正则表达式设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

初级

  1. 用\d可以匹配一个数字; '00\d'可以匹配'001',但无法匹配'00S'
  2. \w可以匹配一个字母或数字; '\w\w'可以匹配'js';
  3. .可以匹配任意字符; 'd.\w'可以匹配13s,1ss等
    • 表示任意个字符(包括0个),s表示一个空格(也包括Tab等空白符)
    • 表示至少一个字符; \s+表示至少有一个空格
  4. {n}表示n个字符;{n,m}表示n-m个字符:\d{3}表示匹配3个数字,例如'010';\d{3,8}表示3-8个数字,例如'1234567' 例如 7 '-'是特殊字符,'-'是特殊字符, '010-12345'正则是\d{3}-\d{3,8}

进阶

[]表示范围

1 [0-9a-zA-Z_]可以匹配一个数字、字母或者下划线; 2 [0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','js2015' 3 [a-zA-Z_$][0-9a-zA-Z_$]*可以匹配由字母或下划线、开头,后接任意个由一个数字、字母或者下划线、组成的字符串,也就是JavaScript允许的变量名; 4 [a-zA-Z_$][0-9a-zA-Z_$]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符) 5 A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配'JavaScript'、'Javascript'、'javaScript'或者'javascript'。 6 ^表示行的开头,^\d表示必须以数字开头 7 表示行的结束,\d表示必须以数字结束

创建一个正则表达式 第一种方式 var re1 = /ABC-001/; 第二种方式 var re2 = new RegExp('ABC\-001'); 创建一个RegExp对象.其中\实际上是一个\

判断正则表达式是否匹配 var re = /^\d{3}-\d{3,8}$/; re.test('010-12345'); // true re.test('010-1234x'); // false

切分字符串 'a b c'.split(/\s+/); 结果// ['a', 'b', 'c'] 'a,b;; c d'.split(/[\s,;]+/); 结果// ['a', 'b', 'c', 'd']

分组group

()表示的就是要提取的分组, 如果正则表达式中定义了组,就可以在RegExp对象上用exec()方法提取出子串来

exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。

exec()方法在匹配失败时返回null。 比如 var re = /^(\d{3})-(\d{3,8})$/; re.exec('010-12345'); // ['010-12345','010','12345'] re.exec('010 12345'); // null

贪婪匹配 正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符

var re = /^(\d+)(0*)$/; re.exec('102300'); // ['102300', '102300', '']

由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。

必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配:

var re = /^(\d+?)(0*)$/; re.exec('102300'); // ['102300', '1023', '00']

JavaScript的正则表达式还有几个特殊的标志,最常用的是g,表示全局匹配: var r1 = /test/g; // 等价于: var r2 = new RegExp('test', 'g');

常用的正则表达式 Email 地址: ^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*URl验证  [a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)? 密码验证 (?!^[0-9]+)(?!^[A-z]+)(?!^[^A-z0-9]+)^[^\s\u4e00-\u9fa5]{6,16} 邮编验证 [1-9]d{5}(?!d) 手机号码验证 ^1\d{10}汉字验证  ^[\u4e00-\u9fa5]{0,}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值