很多知识都是有许多不被注意的细节,一不小心就会拐错了弯,翻了车。今天说几个正则需要注意的地方。
正则和string常用的方法
正则表达式验证字符串的方法
reg.exec(string)
:- 如果执行exec方法的正则表达式没有分组(没有括号括起来的内容),那么如果有匹配,他将返回一个只有一个元素的数组(不论正则是否有标志g),这个数组唯一的元素就是该正则表达式匹配的第一个串;如果没有匹配则返回null
- exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二…个分组
reg.test(string)
: 返回的是true和false。
字符串验证正则的方法
string.match(reg/str)
:- 参数为reg时返回符合正则的子串,但是被封装在数组里;不同于
reg.exec()
,如果正则带有标志g,且有多个匹配的子串,会返回有多个元素的数组。 - 参数为str时若包含返回该str,不包含时返回
null
tip:特殊情况'1 2 ()'.match('1 2 ()')
,当字符串里面有()
时match
直接返回null
,因为括号是正则中特殊的存在,可以匹配$N
。此时用indexOf()
。
- 参数为reg时返回符合正则的子串,但是被封装在数组里;不同于
string.replace(reg/str,replacement)
:将字符串 满足reg的子串/指定的str 替换为replacement,返回值为替换后的结果,原变量不变string.search(reg)
:作用类似于string.indexOf()
,返回符合正则的起始下标,如果没找到也为-1
RegExp静态属性
$1...$9
:每当产生一个带括号的成功匹配时,$1…$9 属性的值就被修改。可以在一个正则表达式模式中指定任意多个带括号的子匹配,但只能存储最新的九个。
Note:
- 这些属性是RegExp的静态属性,而非RegExp实例的属性。
- 这些属性是全局的,只要对正则有影响,就会改变这几个属性的值
RegExp 对象中需要注意的属性:lastIndex
这是一个例子:
1 | var reg=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g; |
这是RegExp
对象$1...$9
值的变化:
可以看到,每次循环$1...$4
是新匹配的4个
附上trigkit4的正则表达式思维导图一张: