Javascript正则表达式处理函数

时间 : 14-08-21 评论 : 0 点击 : 627 次

Javascript有个正则表达式对象RegExp,构建正则表达式有两种方式:

Var RegExpObject = new RegExp(“正则表达式内容”);

Var RegExpObject = /正则表达式内容/;

 

RegExp对象有三个方法

exec() 方法

用于检索字符串中的正则表达式的匹配。

语法:RegExpObject.exec(string)

如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。此外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。我们可以看出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。

但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

test() 方法

用于检测一个字符串是否匹配某个模式

语法:RegExpObject.test(string)

返回true or false

compile() 方法

正则表达式不用通过这个函数编译也一样可以正常工作,为什么还要多此一举呢?文档是这么解释的,compile 方法的作用是将 pattern 转换为内部的格式,从而执行得更快。如果正则表达式被多次重复调用,这一方法可以提高执行效率。

经过测验:同样的字符串和正则表达式,执行100万次,在Chrome、IE9、IE6、Firefox上,是否经过编译的执行速度几乎没有变化!所以,该方法确实是多此一举!

正则表达式对象属性

属性 描述
global RegExp 对象是否具有标志 g。
ignoreCase RegExp 对象是否具有标志 i。
lastIndex 一个整数,标示开始下一次匹配的字符位置。
multiline RegExp 对象是否具有标志 m。
source 正则表达式的源文本。

 

支持正则表达式的字符串函数:

String.match()方法

语法:

stringObject.match(searchStr);

stringObject.match(regexp);

如果regexp没有g属性,那么该方法的返回值跟RegExpObject.exec()一样。

如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,不提供与子表达式匹配的文本的信息,而且也没有 index 属性或 input 属性。

 

search() 方法

语法:stringObject.search(regexp)

stringObject 中第一个与 regexp 相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回 -1。

search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。

 

replace() 方法

语法

stringObject.replace(regexp/substr,replacement)

如果regexp有g标志,则执行全局替换,否则只执行一次替换。如果第一个参数是字符串而不是正则表达式,则该函数只执行一次替换。

Replacement可以是字符串,也可以是函数。是字符串时,$符号在字符串中具有特殊的含义。

字符 替换文本
$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$' 位于匹配子串右侧的文本。
$$ $字符

 

split() 方法

语法:stringObject.split(separator,howmany)

如果 separator 是包含子表达式的正则表达式,那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个正则表达式匹配的文本)。

javascript

Javascript正则表达式处理函数:等您坐沙发呢!

发表评论