总体来说js涉及正则的就2个方面:一个是字符串方面,另一个就是RegExp对象本身。下面我们分别介绍下两者的具体用法。
字符串方面 String方法中有四种方法支持正则表达式
1、search() 该方法是最简单的方法了,它以正则表达式为参数,返回第一个与之匹配的子串的开始字符的位置,如果没有任何匹配的话,返回-1。
返回1 PS:首先,如果search的参数不是正则的话,它会首先被转成正则。其次,search是不支持全局检索的,所以大家就不要白费力气用它搜全局了
2、replace() 该方法执行检索与替换操作。第一个参数还是正则表达式,第二个参数是要替换的字符串或者操作函数。当第二个参数是处理函数时,处理函数对应参数分别为当前匹配的子串、捕获分组、下标、字符串副本
3、match() 这个方法可以说是String中比较常用的方法,它唯一的参数就是正则表达式,返回的是包含匹配结果的数组。该方法支持全局匹配。
PS:如果有g标识,返回就是包含所有匹配的数组,这时捕获分组是无效的;反之,没有g标识时,返回还是一个数组,数组[0]是完整匹配,数组[n]是$n的捕获(前提是你有捕获分组)。当没有g标识时,返回的匹配数组还会有2个额外属性—index和input,index不用多说了匹配位置,input就是目标字符串的副本。
4、split() 该方法有2个参数,第二个参数是限制数组的长度,如果指定了,超过这个长度的元素就不会再放进数组里了。
RegExp方面 每个RegExp对象都有5个属性。 source是一个只读字符串,它存放的是正则表达式的文本。 global是一个只读布尔值,代表g是否全局匹配。 ignoreCase同理,代表i是否忽略大小写。 multiline同理,代表m是否多行匹配。 lastIndex是一个可读写的整数,存储下一次开始匹配的位置。
构造函数RegExp()有2个字符串参数,第一个参数是包含正则表达式主体的字符串,即正则表达式直接量中出现在斜线对之间的文本。注意一些关键字要进行转义。第二个参数是可选的,就是g、i、m等标示。
用RegExp构造正则表达式比直接用正则表达式直接量的优势就在于可以动态地创建一个正则表达式。下面说说他匹配操作的方法。
1、exec()
该方法和String方法match()很相似,只不过它是以字符串为参数。如果没有匹配到,它将返回null。反之将返回一个数组。这里的数组具体内容和非全局的match匹配一样。数组[0]是匹配到字符串,数组[n]是对应捕获分组。而且index和input也和match一致。 PS:无论正则表达式是否具有g标示,exec返回的数组类型都是一样的,但是它会把lastIndex属性设置到紧接匹配子串的字符位置,以便下次继续匹配,因为这点特殊性,exec可以遍历调用。
2、test()
这个方法较简单,就一个参数,如果匹配上了,就返回true,反之为false。它也支持遍历,就相当于调用exec返回值不是null,它就返回true。
PS:这个要小心一个坑,如果你用这2个方法匹配多个字符串,而每次匹配一个字符串又没有匹配完时,lastIndex属性不会自己重置为0的。下面是例子。
3、compile()
可用于改变和重新编译正则表达式。当在循环中有重复正则匹配的时候,用编译后的正则表达式执行起来,效率更高(前提是正则表达式是固定的,如果你每次循环都需要动态适配新正则的话,是没有效果的)。
扫码下方二维码,
随时关注更多前端干货文章!
▼
微信:IMWebTech