js正则表达

什么是正则

    正则表达式实际上就是规定了一系列的字符串规则,例如说我们看到183****0492就能知道这是一个手机号,看到xxxx@xx.com就知道这是一个邮箱。那么,我们怎么让计算机知道这一切呢?

    我们人类之所以能分辨出来是因为我们心里有一个模型,我们知道十一位的数字很有可能就是一个手机号,@+邮箱品牌+.com的组合很有可能是一个邮箱。正则正式提供一种语法,让我们把自己心中的那种识别模式告诉计算机,让计算机能像我们人类一样去识别特定的字符串。

创建

正则也是一个js内置对象,所以可以通过new RegExp()的形式创建,也可以通过简写//的形式创建:

var re01 = new RegExp('a'); //这种形式创建,可以往正则中传入变量
var re02 = /a/; // 简写形式不可以传入变量,且不能加引号

方法test

re.test(str)方法是正则对象上的一个方法,接受一个字符串作为参数,如果字符串中有符合正则的部分,则返回true,反之则返回false。

var str = 'abcd';
var re = /a/;
re.test(str) // true

方法search

str.search(re),查找字符串中是否有符合正则的部分,如果有,返回第一个匹配项的位置,否则返回-1;

var str = 'bbcasa';
var re = /a/;
str.search(re) // 4

方法match

str.match(re),寻找字符串中符合正则的匹配项,并将这些匹配项以数组的形式返回,否则返回null。

var str = 'abcaadaefaa';
var re = /a+/g; 
// "+" 是一个量词表示出现一次或更多,"g"表示全局搜索,正则默认匹配到一个匹配项后就不会继续查找了。
str.match(re) // ["a", "aa", "a", "aa"]

方法replace

str.replace(re, newStr | callback) 该方法首先匹配字符串中符合正则的部分然后替换成newStr或者callback的返回值;这里的callback = function(str,str1,str2…){return res},参数str表示匹配到的匹配项,str1,str2…分别表示正则匹配项中的第一个,第二个子项。

var str = "我爱吃饭,我爱睡觉,我爱打豆豆";
var re = /(吃饭)|(睡觉)|(打豆豆)/g ;
str.replace(re, (...grv) => {
    var res = [];
    res = grv[0].split("").map(() => {return "*"}).join("")
    return res
})
//输出:"我爱**,我爱**,我爱***"

上面的例子中,我们过滤了某些词语,并且将其替换成**号,相信,大家在玩游戏的时候深有体会,打了半天字,发出去的没有几个!

默认行为

  • 正则表达式中默认是区分大小写的,不过可以通过在末尾加上i来关闭这一默认行为
var re=/AbvR/i;
  • 找到第一个匹配项就会结束查找,通过在末尾加g可以使得正则变成全局匹配模式
var re=/as/b;

正则中的转义字符

  • 点“.”

    • 正则中“.”表示任意字符
    • . 表示真正的点
    • 多用于文件后缀名
  • \d; \D

    • 数字,非数字
  • \w;\W
    字符,非字符

  • \s; \S

    • 空格,非空格
  • \b;\B
    独立部分,非独立部分
    独立部分是什么:
    起始
    结束
    空格

  • \1; \2; \3 …
    重复第n个子项
    目的:看下面两个例子有什么不同

正则中的小括号

  • 分组操作:小括号内的部分作为一个整体进行操作,请看下面的例子
var str = '2017-8-12'
var re01 = /\d-+/g 
var re02 = /(\d-)+/g
str.match(re01) // ['7-', '8-']
str.match(re02) // ['7-8-']
  • 匹配子项:整个正则匹配到的匹配项我们暂且成为父项,然后就容易理解,被小括号括起来的各个部分就是父项下面的一个一个的子项。
var str = '2017-8-12'
var re = /(\d+)(-)/g
str.replace(re, ($0, $1, $2) => {
    console.log($0, $1, $2)
    return $1 + "."
}) // 2017- 2017 -;  8- 8 -;  2017.8.12

match()方法在不加g的情况下,在返回的数组中会展开所有子项;

var str = 'abc'
var re = /(a)(b)(c)/
str.match(re) // ['abc', 'a', 'b', 'c']
8.正则中的中括号

正则中的中括号
字符类:一组相似的字符,[abc]整体代表一个字符,内部为或的关系。

[^abc]:代表一位,单不能是a,b,c
[a-z]: 代表一个范围(从小到大),整体代表一位;
[a-z]+: 一位或多位

正则中的大括号

大括号用来表示量词

  • {4, 7}: 4-7次
  • {4,}:最少4次
  • {4}:正好4次
  • {1,} 相当于+
  • ?相当于{0,1}
  • *相当于{0,}

限制字符串的起始和结束

  • ^: 写在正则的开头代表字符串的起始
  • $:写在正则的结束代表字符串的结束
re=/^\s*|\s*$/g //去掉收尾空格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值