语法:regobj.test(str) 对字符串执行搜索
返回值:布尔值。测试str中是否存在匹配regobj模式的字符串,存在返回true,不存在返回false
注意:该方法在正则对象是否带有全局属性(g)下的表现不同
先介绍下正则对象的lastindex属性,lastindex 是正则表达式匹配内容时,开始匹配的位置。
先说结论:正则表达式是否带有全局属性的区别就是,每次执行后会不会自动修改该正则对象的lastindex属性值,带有g,就会自动修改,不带就不会修改。
(1)不带全局属性g
刚开始都是从下标0处开始匹配,不带g时,无论执行多少次,该正则对像的lastindex属性均不变
(2)带全局属性g
该开始从下标为0处开始匹配,匹配后会自动修改该正则对象的lastindex属性,且修改为当前表达式匹配内容的最后一个字符的下一个位置。一直到字符串结尾,重新设置lastindex为0
语法:regobj.exec(str)对字符串执行搜索
返回值:.如果没有匹配的文本则返回null,否则返回一个结果数组:
返回的数组:第一个元素与正则表达式相匹配的文本;第二个元素是与regexpobject的第一个子表达式相匹配的文本(如果有的话);第三个元素是与regexpobject的第二个子表达式相匹配的文本(如果有的话),以此类推。
且该数组具有index属性: 声明匹配文本的第一个字符的位置
该数组有input属性: 存放被检索的字符串string
(1)不带全局属性g
正则对象的lastindex属性始终不变
(2)带全局属性g
会自动修改该正则对象的lastindex属性
总结:对于正则对象的exec()和test()方法,正则表达式是否带有全局属性的区别就是,每次执行后会不会自动修改该正则对象的lastindex属性值。
语法:stringobj.match(regexp/searchvalue)字符串内检索指定的值,或找到一个或多个正则表达式的匹配
在此,只看stringobj.match(regexp)
返回值:数组 或者 null
(1)不带全局属性g
返回的是:首次匹配的子串和所有匹配的捕获组组成的数组,且数组具有index属性和input属性
(2)带全局属性g
返回的是: 所有匹配的子串组成的数组
注意:在全局检索模式下,match() 即不提供与子表达式(捕获组)匹配的文本的信息,也不声明每个匹配子串的位置。
语法: str.replace(reg/substr,newstr/function) 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
返回值:替换了之后的新的字符串,原字符串不变
只看str.replace(reg,fun)
每个匹配项都调用该fun函数(若不是全局匹配,则一定只有一个匹配项),且该函数的第一个参数是匹配模式的字符串,接下来的参数是与模式中的子表达式匹配的字符串
该函数返回的字符串将作为替换文本使用
(1)不带全局属性g
只有一个匹配项“1a2” 且把该匹配项换成 $1,即第一个捕获组的内容
(2)带全局属性g
带全局属性,则会循环匹配,循环调用回调函数
语法:strobj.split(str/reg,howmay) 用于把一个字符串分割成字符串数组。
howmay可选,指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
有没有全局属性标志都是一样的
如对本文有疑问, 点击进行留言回复!!
2016年信息安全工程师综合知识第11-15题解析【建群网培信息安全工程师】
网友评论