用最简洁的方式讲解正则表达式

作为一名程序员,对于正则表达式,都不陌生。但是在工作中可能并不会经常性的用到,所以就造成一旦有任务下来第一时间,就是去百度上面去找,虽然大多都能找到,但是如果自己能懂,那不是更好吗?而且网上的也并不一定能让完全符合项目需求~
基础知识
用\d可以匹配一个数字,\w可以匹配一个字母或数字,所以:

  • ‘00\d’可以匹配’007’,但无法匹配’00A’;
  • ‘\d\d\d’可以匹配’010’;
  • ‘\w\w’可以匹配’js’;

.可以匹配任意字符,所以:

  • 'js.‘可以匹配’jsp’、‘jss’、'js!'等等。

要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:

例子:\d{3}\s+\d{3,8}。

  • \d{3}表示匹配3个数字,例如’010’;

  • List item \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配’ ‘,’\t\t’等;

  • \d{3,8}表示3-8个数字,例如’1234567’。
    进阶
    要做更精确地匹配,可以用[]表示范围,比如:

  • [0-9a-zA-Z_]可以匹配一个数字、字母或者下划线;(意思就是:对于只有一个字符的字符串才好使

  • [0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如’a100’,‘0_Z’,'js2015’等等;

  • [a-zA-Z_$][0-9a-zA-Z_$]*可以匹配由字母或下划线、 开 头 , 后 接 任 意 个 由 一 个 数 字 、 字 母 或 者 下 划 线 、 开头,后接任意个由一个数字、字母或者下划线、 线组成的字符串,也就是JavaScript允许的变量名;

  • [a-zA-Z_$][0-9a-zA-Z_$]{0,
    19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。

  • A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配’JavaScript’、‘Javascript’、‘javaScript’或者’javascript’。

^表示行的开头,^\d表示必须以数字开头。
$表示行的结束,\d$表示必须以数字结束。

你可能注意到了,js也可以匹配’jsp’,但是加上^js$就变成了整行匹配,就只能匹配’js’了。

正则表达式创建的方式
首先正则表达式创有两种方式
例如,匹配一个以ABC开头,001结尾,中间用-号隔开的字符串。
可以使用一下两种方式:

// 第一种方式是直接通过/正则表达式/
var re1 = /ABC\-001/;

// 第二种方式是通过new RegExp('正则表达式')创建一个RegExp对象
var re2 = new RegExp('ABC\\-001');

// 注意,为什么第二种写法有两个\\?因为字符串的转义问题,所以字符串的两个\\实际上是一个\。

正则表达式的使用方式

var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false

RegExp对象的test()方法用于测试给定的字符串是否符合条件。

这才是干货
工作中一般使用正则只会遇到这两种情景:
1、只能输入什么?
2、不能输入什么?

//  只能输入什么
//  以^开头$结尾,例如:
var re = /^[0-9a-zA-Z]+$/; // 只能输入数字,字母(不区分大小写)
//  不能输入什么
//  再加上一个^就是取反的意思
var re = /^[^#$@%^&*()¥()]+$/; // 不能输入#¥%&*等特殊字符。

注意:取反还有一种方式,主要用于在代码校验:if(!re.test()){}即可。

补充几个常用的正则表达式

var re = /^[\u4e00-\u9fa5]+$/; // 只能输入中文
var re2 = /^[0-9a-zA-Z]\u4e00-\u9fa5]+$/; // 只能输入中英文和数字
var re3 =/(http|https):\/\/([\w.]+\/?)\S*/; // 必须以http,https开头,且需符合URL规范(即,https://www格式)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值