js 正则用法-笔记

10 篇文章 0 订阅

创建正则表达式

js是通过RegExp类型来支持正则表达式的,主要有2种方式来创建正则表达式:

  1. 以字面量的形式来定义
  2. 使用RegExp构造函数。
    这次做的笔记主要是写字面量来表示,RegExp构造函数以后再补充。一般情况下字面量用的比较多,但是当正则需要传参数的时候,必须要用RegExp的写法(比如说在一个函数中,正则是一个传进来的参数)

字面量表示

形如:

var express = /pattern/flags;

其中pattern是正则表达式
flags:g表示全局模式,即模式被应用于所有字符串;i表示不区分大小写;m表示多行模式。

元字符

特别注意:模式中使用的所有的元字符都必须转义。用\转义。
元字符有:( { [ \ ^ $ | ? * + . ] } )
例如:

var str = /\[ab\]c/   //匹配第一个"[ab]c"

捕获组/匹配子项

匹配子项:小括号()(小括号还有另外一个意思,分组操作)

可以把正则的整体叫做母亲,然后把左边第一个小括号里面的正则,叫做这个母亲的第一个子项(捕获组)。第二个就是第二个子项(捕获组)。。。。。。
例如:

 var re = /(\d+)(-)/g;

在这里”\d+”就是第一个捕获组,“-”是第2个捕获组

重点区分{}的含义,以及一些特定的符号

1.{} 量词

{}在正则里面表示的是量词

  • {n,m}表示前面的字符最少出现n次,最多出现m次。
  • {n,}至少出现n次
  • {n}真好出现n次
  • + :其实是{1,}的简写
  • ? : {0,1},至多1次
  • * : {0,},至少0次
2.() 匹配子项,或者是分组操作
  • 把正则的整体叫做(母亲),然后把左边第一个小括号里面的正则,叫做这个母亲的第一个子项(孩子)。第二个就是第二个子项。。。。。。
3.[] 字符类
  • []在正则里面表示的是字符类,也就是一组类似的元素,[]中括号里面的整体代表一个字符。
4.特定的一些符号
  • \s : 一个空格(包括Tab等空白符)
  • \S : 非空格
  • \d : 一个数字
  • \D : 非数字
  • \w : 一个字符 (字母,数字,下划线_)
  • \W : 非字符
  • \b :独立的部分,(起始,结束,空格),也就是匹配单词边界,注意在单词边界匹配的位置,单词字符后面或前面不与另一个单词字符直接相邻。请注意,匹配的单词边界并不包含在匹配中。换句话说,匹配的单词边界的长度为零。(不要与 [\b] 混淆。)
  • \B : 非独立部分,也就是非单词边界。匹配位置的上一个和下一个字符的类型是相同的:即必须同时是单词,或必须同时是非单词字符。字符串的开头和结尾处被视为非单词字符。
    例如:
var str = 'one two'
var re2 = /one\b/;
alert(re2.test(str));

/one\b/表示one后面不与另一个单词字符直接相邻

  • . : 匹配任意字符
    • : 表示一个区域范围(从小到大)
  • ^ : 如果在正则的最开始位置,代表起始的意思,如果是在[]表示排除
  • $ : 如果在正则的最后位置,代表结束的意思
  • | : 表示或者
  • \数字 : 表示重复子项:\1 重复的第一个子项;\2 重复的第二个子项.
    例如:
var str = 'onesssgsdoso'
var re2 = /(o)(s)\1/;
alert(re2.test(str));

/(o)(s)\1/ 这里\1就是表示o

var str = '123231a443'
var re2 = /([0-9])(a)\1/;
alert(re2.test(str));

//结果是false

var str = '123231a143'
var re2 = /([0-9])(a)\1/;
alert(re2.test(str));
//结果是true

所以注意:子项是指匹配到的字符串。

方法

match()

match:正则去匹配字符串,如果匹配成功,就返回匹配成功的数组;如果不成功,返回null;
用法:字符串.match(正则)
例如:

var str = '12ss123s1d23632x';
var re = /\d\d+/g;//全局模式g:全部查找
alert(str.match(re));

结果是[12,123,23632]
注意:match()也可以用来匹配子项,匹配的子项放在返回数组的后几项,不过这个前提是不加g,加了g就不会返回子项了。
例如:

var str = 'sdfsdfsdfsddfs sd';
var re = /(s)(d)/;
alert(str.match(re));

结果是[sd,s,d]

但如果加了g

var str = 'sdfsdfsdfsddfs sd';
var re = /(s)(d)/g;
alert(str.match(re));

结果就是[sd,sd,sd,sd,sd]

test()

test:正则去匹配字符串,如果匹配成功,返回真,否则返回假;
用法:正则.test(字符串)

serch:正则去匹配字符串,如果成功,返回字符串中第一个匹配项的索引;如果没找到,则返回-1
用法:字符串.search(正则)。

注意这里只返回第一个匹配项,不管有没有g都是这样。

replace()

replace:正则去匹配字符串,匹配成功的字符去替换成新的字符串;
用法:字符串.replace(正则,字符串);
注意它的第二个参数可以是字符串,也可以是个回调函数:

回调函数

注意函数的参数(注意顺序):模式的匹配项,(第一个捕获组的匹配项,第2个捕获组的匹配,…),模式匹配项在字符串中的位置,原始的字符串。
这个回调函数应该返回一个字符串,表示被替换的匹配项。
例如:

var str = '2016-7-14';
var re1 = /(\d+)(-)/g;
str = str.replace(re1,function($0,$1,$2){
    //第一个参数是母亲,第2个参数是第2个孩子、、、、
    alert($1);
    return $1 + '.'
});

这段代码中,$0就是2016-,7- ,而对应的$1是,2016,7,对应的$2是-,-

exec() (待补充)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值