正则

2018-11-20  本文已影响6人  指尖轻敲

创建正则表达式

  1. 构造函数创建
var parrent1 = new RegExp("box");
var parrent2 = new RegExp("box", "gi");

第一个参数是匹配文本的规则;第二个参数(可选)是模式修饰符。i表示忽略大小写,g表示全局匹配。ES6新增的暂时不说

  1. 字面量创建
var parrent3 = /box/;
var parrent4 = /box/gi;

语法:/模式/模式修饰符

RegExp实例方法

var str = "this is a Box box box";
var parrent = new RegExp("box", "gi");
1、test()

这个方法用来查找字符串中是否存在正则表达式所写的模式规则。有就返回true,没有就返回false。

console.log(parrent.test(str)); //true

这个方法只要匹配到符合规则的就会返回true,不会继续往下找了,所以这个方法使用全局匹配是没用的。

2、exec()

这个方法也是匹配符合规则的字符,如果没有匹配到就返回null,如果匹配到了返回的是一个数组,这个数组第一个元素是在字符串中匹配到的字符,第二个元素是匹配到的字符的起始索引。

var reg = /xiao/i;
var str = "wo shi yi zhi xiao xiao niao"
console.log(reg.exec(str)); 
//["xiao", index: 14, input: "wo shi yi zhi xiao xiao niao", groups: undefined]
var reg2 = /da/i
console.log(reg2.exec(str)); //null
3、compile()

该方法用于修改正则表达式,也可以修改模式修饰符。也就是把正则表达式匹配的字符和模式替换掉。

var reg = /xiao/ig;
var str = "wo shi yi zhi Xiao xiao niao";
console.log(reg.exec(str)); //["Xiao", index: 14, input: "wo shi yi zhi Xiao xiao niao", groups: undefined]
var regNew = /wo/i;
reg.compile(regNew);
console.log(reg.exec(str)); //["wo", index: 0, input: "wo shi yi zhi Xiao xiao niao", groups: undefined]

补充:在全局匹配的模式下,exec和test方法匹配到第一个字符串的时候,会把它对应的索引存储起来,下一次再检索同一字符串时,会从刚才存储的位置开始检索。最后当检索结果为null时,下一次从头开始。当然如果没有加g进行全局匹配的话,每次都是从头开始查找。

字符串的模式匹配

上面是正则的方法,下面是字符串的匹配方法,都可以用来匹配。

match()

只接受一个参数,正则表达式或者RegExp对象。(和正则的exec方法一样)。数组第一项是与整个模式匹配的字符串,之后的每一项保存着正则表达式中的捕获组匹配的字符串

var test = "cat, bat, sat, fat";
var pattern = /.at/;
<!--与pattern.exec(test)相同,index表示匹配项在字符串中的位置,input表示应用正则表达式的整个字符串-->
var result = test.match(pattern); // ["cat", index: 0, input: "cat, bat, sat, fat"]
search()

参数与match相同,返回字符串中第一个匹配项的索引。如果没有就返回-1。

var test = "cat, bat, sat, fat";
var pos = test.search(/at/);
alert(pos); //1
replace()

替换字符串,返回值为替换后的字符串,原来的字符串不变。

如果第一个参数是字符串,则替换的只是第一个匹配项,如果想全部替换就得用正则表达式。

var str = "cccc";
console.log(str.replace("c", "老王")); //老王ccc
console.log(str.replace(/c/g,"老王")); //老王老王老王老王

特殊字符

特殊字符,顾名思义就是有特殊含义的字符,所以没办法直接匹配,如果要匹配以下字符,需要在前面加一个转义字符 \。

//首字符不能是数字(不能以数字开头)
var parrent = /^\D/;
var str = "_cdd";
console.log(parrent.test(str));

//首字符必须是数字(以数字开头)
var parrent = /^\d/;
console.log(parrent.test(str));

//必须以字母结尾
var parrent = /[a-zA-Z]$/;
var str = "ss_";
console.log(parrent.test(str));

非打印字符

//匹配 数字、字母中的任意一个和ABC
var parrent = /[0-9a-zA-Z]ABC/i;
var str = "eABcCds_ABCsdf";
console.log(parrent.test(str));//true

//匹配 数字、空白字符中的任意一个
var str = "this is 3haha";
var parrent = /[\d\s]/;
console.log(parrent.test(str));//true

//匹配 包含 b和空白字符和x
var str = "this is b xhaha.";
var parrent = /b\sx/;
console.log(parrent.test(str));//true

//按照空格或,或!中的任意一个进行字符串切割
var str = "this is a box,box,box!";
console.log(str.split(/[ ,!]/));//["this", "is", "a", "box", "box", "box", ""]
上一篇下一篇

猜你喜欢

热点阅读