首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

正则表达式侬晓得哇?

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 - #$*%

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180812G0N9MI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券