正则表达式

我们为什么会用到正则表达式呢?

正则表达式的作用:匹配特殊字符或有特殊匹配原则的字符的最佳选择


正则表达式也需要创建;

方式一:字面量

var reg = /abc/;
var str = "abcd";

创建了一个正则表达式abc,可以利用正则表达式的方法reg.test(str);来测试str中是否含有正则表达式abc字符片段;

在正则表达式后还能添加属性例如:

/abc/i   ---->这个i属性表示ignoreCase忽视大小写,也就是说在匹配过程中可以忽略大小写;

                    (属性还有其他的,后面介绍);


方式二:new

var str = "abcd";
var reg = new RegExp("abc","i");

第一个参数是正则表达式abc,第二个代表的属性;


正则表达式修饰符(就是刚刚说提到的属性):三个

1、i        ---->忽略大小写的匹配

2、g       ---->全局匹配,查找所有匹配并非在找到第一个匹配后停止

                        (这里一般用到字符串的match()方法,返回匹配的字符串)

3、m      ---->执行多行匹配(多用在匹配开头和结尾,m可以换行匹配);

刚刚提到,正则表达式有test()方法,而字符串有match()方法;

test()  ---->只会返回true和false判断是否有匹配;

match()---->会返回匹配的字符串;


表达式:方括号

/[]/   ---->一个[]代表一位,里面添的东西就是区间;

                (例如 var reg = /[abc]/;则可以匹配第一位的a、b、c中的任意一个);

                当然还有很多规则可用,区间范围可以有很多,可以参考文档;


元字符同样也是表达式的一种);

例如: var    reg = /\w/g;

这个\w就是元字符中的一种,这个w ---->world;而\w  ===  [0-9A-z_];

对应的还有一个\W   ===   [^\w];

(*****“^”这个符号写在表达式中表示的是“非”*****)

(在正则表达式中“^”---->“以什么什么开头”:例如/^abc/g  ---->表示以a开头后面接bc的字符串)

(在正则表达式中“$”---->“以什么什么结尾”:例如/abc$/g  ---->表示以c结尾前面是ab的字符串)

特殊的有/./        ---->  .   ===   [^\r\n];

还有\s(空白字符)、\d(数字【0-9】)、\b(单词边界)等等,一般大写的都是非小写的;

正则表达式中可以用“|”,例/\d|\s/;


量词   (表示数量的词)

n代表匹配规则,匹配表达式;如\w、\d、\s等等;

匹配会满足“贪婪原则”,能匹配多个尽量不匹配少个;

例如n   ---->n+ ---->{1 、infinity}  可以匹配1到无数个

                    n*  ---->{0 、infinity}  可以匹配0到无数个,最后一个为空串;

                    n? ---->{0、1}  可以匹配0到1个,最后也有个空串;

                    n{X} ---->{X}   一次性匹配X个;

                    n{x,y} ---->{x、y}  可以匹配x到y个;

                    n{x,} ---->{x,infinity};

例如:

var reg = /\w+/g;

说明满足\w规则的字符可以出现无数次;一次性匹配出所有复合规则的;


对象方法

lastIndex和exec()方法;

reg.exec()该方法从哪儿开始匹配完全取决于lastIndex的值,并且我们还可以手动设置修改lastIndex的值;

注意在不加修饰符g的时候,lastIndex会一直都是0;加了g之后他才会像游标一样增加;

var reg = /abc/g;
var str = "abcabcabc";

在控制台,首先查看reg.lastIndex  --->此时值为0;

进行匹配 reg.exec(str)   --->["abc", index: 0, input: "abcabcabc"]  --> 是个类数组形式的返回值index为0;

重新查看reg.lastIndex  --->此时的值就变为了3;


如何匹配格式为AAAA、AABB的字符串?

var str = "aaaa";
var reg = /(\w)\1\1\1/;    
//加上()代表子表达式;
//\1表示反向引用第一个子表达式的内容;
//所以上述可以匹配AAAA形式的东西

//同理可以匹配AABB形式的
var str = "aabb";
var reg1 = /(\w)\1(\w)\2/;

当有子表达式的时候,使用正则表达式的exec方法会返回出子表达式引用的内容;

如:reg1.exec(str)  --->(3) ["aabb", "a", "b", index: 0, input: "aabb"];

而字符串拥有的str.match(reg1)方法,在不加修饰符‘g’时,返回的结果跟上式一样;


字符串的str.search(reg)方法,匹配到就返回匹配到的位置信息,如果匹配不到就返回-1;

字符串的str.split(reg)方法,按照正则表达式的规则拆分字符串;

字符串的str.replace(reg)方法,替换,注意,普通的替换只能匹配一个,替换第一个;

var str = "aa";
console.log(str.replace("a","b"));   //ba

但是用在正则表达式里面就不一样啦:

var reg = /a/g;
var str = "aa";
console.log(str.replace(reg,"b"));    //bb

第二个参数还可以传函数:

var reg = /-(\w)/g;
var str = "the-first-name";
console.log(str.replace(reg,function($,$1){
	return $1.toUpperCase();
}));                                               //toFirstName变成了小驼峰式;

匹配多少次,这个函数就执行多少次;


但让还有很多其他的小知识;可以参见W3CSchool文档,多看多查~~~;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值