JS通过RegExp类型来支持正则表达式。在 JavaScript中,正则表达式也是对象,既然是一种对象,那么它是如何创建的呢?
RegExp对象创建
letregex =/ab+c/i
letregex =newRegExp(/ab+\n/,"i")
letregex =newRegExp("ab+c","i")
letregex =newRegExp(String.raw`ab+c`,"i")
//String.raw函数使模板字符串所见即所得
这里需要注意的是,在使用字符串构造RegExp对象时,里的内容有特殊意义的字符需要转义(如:换行符等)
正则表达式组成
其内容由之间的字面量构成,用来描述正则表达式的特殊字符有:
注意:一个正则表达式模式使用括号,将导致相应的子匹配被记住。例如,/a(b)c /可以匹配字符串“abc”,并且记得“b”。回调这些括号中匹配的子串,使用数组元素[1],……[n]。 在括号之后即可调用。,如果不想捕获任何匹配,则可以使用括号,零宽断言尽管有括号,但不会捕获。
零宽断言
当使用正则表达式去匹配内容时,有时我们需要确定匹配量的某些位置(不是字符,所以没有宽度),这是就需要用到“零宽断言”了。
(?=expr)//正预测, 断言某个位置的右边满足expr
(?!expr)//负预测, 断言某个位置的右边不满足expr
(?
(?
例题:
maskify("4556364607935616") =="############5616"
maskify("64607935616") =="#######5616"
maskify("1") =="1"
maskify("") ==""
// "What was the name of your first pet?"
maskify("Skippy") =="##ippy"
maskify("Nananananananananananananananana Batman!") =="####################################man!"
这道题要求将信用卡卡号的前N位隐藏,那么解题思路就是要找到某个元素,该元素所处的位置后边要有大于等于4个元素,故作出如下解答:
functionmaskify(cc){
returncc.replace(/.(?=.)/g,"#")
}
关于使用到正则表达式的一些方法
test()方法
方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回或。
regexObj.test(str)
值得注意:如果正则表达式设置了全局标志,的执行会改变正则表达式属性。 (类似的还有下文提到的方法)
exec()方法
方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组(挺有来头)或
regexObj.exec(str)
varre =/quick\s(brown).+?(jumps)/ig
varresult = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog')
返回值:
可知,返回的数组各个属性名以及属性值,当正则表达式使用 "" 标志时,可以多次执行方法来查找同一个字符串中的成功匹配。当你这样做时,查找将从正则表达式的属性(只有当全局搜索时才会有该属性)指定的位置开始。
注意:不要把正则表达式字面量(或者构造器)放在条件表达式里。由于每次迭代时的属性都被重置,如果匹配,将会造成一个死循环。
varmyRe =/ab*/g;
varstr ='abbcdefabh';
varmyArray;
//此处不能直接放字面量,否则造成死循环
while((myArray = myRe.exec(str)) !==null) {
varmsg ='Found '+ myArray[] +'. ';
msg +='Next match starts at '+ myRe.lastIndex;
console.log(msg);
}
search()方法
方法执行正则表达式和对象之间的一个搜索匹配。 否则,返回-1。
str.search(regexp)
match()方法
与 exec() 方法类似
str.match(regexp)
如果你需要知道一个字符串是否匹配一个正则表达式,可使用
如果你只是需要第一个匹配结果,你可能想要使用
如果你想要获得捕获组,并且设置了全局标志,你需要用
split()方法
若separator是正则表达式,则按re的匹配将str分割成数组,如果re中捕获分组(带括号),则捕获分组会按序出现在相应分割的位置
str.split([separator[, limit]])
replace()方法
返回一个被替换之后新的数组(原字符串并不会被改变)
str.replace(regexp|substr, newSubStr|function)
替换字符串可以使用如下特殊符号:
注意:function的参数列表:
例子:
functionreplacer(match, p1, p2, p3, offset, string){
return[p1, p2, p3].join(' - ');
}
varnewString ='abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString);// abc - 12345 - #$*%
领取专属 10元无门槛券
私享最新 技术干货