JavaScript RegExp 对象

成立 RegExp 对象的语法:

直接量语法

/pattern/attributes

开创 RegExp 对象的语法:

var obj=new RegExp(pattern,attributes);

事例1:

 var pattern=/a/;
   document.write(pattern.exec("asdas"));

事例2:

 var obj=new RegExp("a");
   document.write(obj.exec("asdas"));

事例1和事例2的实施结果是同等的;

参数

参数 pattern 是二个字符串,钦命了正则表明式的方式或其余正则表明式。

参数 attributes 是二个可选的字符串,包括属性
“g”(执行全局匹配查找全数匹配而非在找到第一个门道很是后停下。)、”i”:执行对大小写不灵敏的匹配。

“m”:执行多行匹配。,分别用于钦点全局匹配、区分轻重缓急写的匹配和多行匹配。ECMAScript
标准化在此之前,不支持 m
属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。

返回值

一个新的 RegExp
对象,具有钦点的形式和标志。倘若参数 pattern 是正则表明式而不是字符串,那么
RegExp() 构造函数将用与钦定的 RegExp 相同的形式和标志创设七个新的 RegExp
对象。

一经不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new
运算符调用时一样,只是当pattern 是正则表明式时,它只重临 pattern,而不再次创下建3个新的
RegExp 对象。

抛出

SyntaxError – 如果 patternECMAScript, 不是合法的正则表达式,或 attributes 含有
“g”、”i” 和 “m” 之外的字符,抛出该尤其。

TypeError – 如果 pattern 是 RegExp
对象,但从未不难 attributes 参数,抛出该尤其。

RegExp 对象方法:

一 、test():检索字符串中钦命的值。重回 true 或 false。

var patt1=new RegExp("e");

document.write(patt1.test("The best things in life are free")); 

二 、exec():检索字符串中钦命的值。重临找到的值,并显明其岗位。

方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

叁 、compile():既能够变动物检疫索方式,也得以加上或删除首个参数。

 

var patt1=new RegExp("e");

document.write(patt1.test("The best things in life are free"));

patt1.compile("d");

document.write(patt1.test("The best things in life are free"));

修饰符:

 

一 、g:执行全局匹配查找全数匹配而非在找到第三个相当后截至;

在使用 “g” 参数时,exec() 的劳作规律如下:

  • 找到第一个 “e”,并蕴藏其岗位
  • 比方重国民党的新生活运动行 exec(),则从存款和储蓄的任务上马寻找,并找到下一个”e”,并蕴藏其岗位

    var patt1=new RegExp(“e”,”g”);
    do
    {
    result=patt1.exec(“The best things in life are free”);
    document.write(result);
    }
    while (result!=null)

RegExp 对象属性

1:global:RegExp 对象是不是享有标志 g。

2:ignoreCase:RegExp 对象是还是不是持有标志 i。

3:lastIndex:二个平头,标示初步下一遍匹配的字符起头地点。

4:multiline:RegExp 对象是还是不是有所标志 m;

5:source:正则表达式的源文本。

 

   var obj=new RegExp(/s/);
      document.write(obj.source);

 

支撑正则表达式的 String 对象的章程

1:search()
方法用于检索字符串中钦赐的子字符串,或探寻与正则说明式相匹配的子字符串。

忽略大小写事例:

 

<script type="text/javascript">

var str="Visit W3School!"
document.write(str.search(/w3school/i))

</script>

 

返回值

stringObject 中率先个与 regexp 相匹配的子串的发端地方。

诠释:假使没有找到别的匹配的子串,则赶回 -1。

说明

search() 方法不履行全局匹配,它将忽略标志 g。它同时忽略 regexp 的
lastIndex 属性,并且总是从字符串的开始展开检索,那象征它连接回到
stringObject 的首先个相当的地点。

 

2:match()
方法可在字符串内寻找钦赐的值,或找到三个或多少个正则表明式的同盟。该方法类似
indexOf() 和 lastIndexOf(),不过它回到钦定的值,而不是字符串的地方。

返回值

寄存匹配结果的数组。该数组的剧情重视于 regexp 是不是富有全局标志 g。

说明

match() 方法将追寻字符串 stringObject,以找到三个或七个与 regexp
匹配的文件。那么些措施的表今后不小程度上取决 regexp 是不是富有标志 g。

万一 regexp 没有标明 g,那么 match() 方法就只能在 stringObject
中实践二回匹配。如若没有找到其余匹配的文件, match() 将重返null。不然,它将回来2个数组,当中存放了与它找到的合作文本有关的消息。该数组的第
0
个元素存放的是十分文本,而别的的因素存放的是与正则表明式的子表明式匹配的文书。除了那个健康的数组成分之外,再次回到的数组还富含五个对象属性。index
属性注明的是匹配文本的苗子字符在 stringObject 中的地点,input
属性申明的是对 stringObject 的引用。

一经 regexp 具有标志 g,则 match() 方法将推行全局检索,找到 stringObject
中的全数匹配子字符串。若没有找到任何匹配的子串,则赶回
null。要是找到了二个或多少个匹配子串,则赶回一个数组。可是全局匹配再次来到的数组的始末与前者大分化,它的数组成分中存放的是
stringObject 中有所的匹配子串,而且也没有 index 属性或 input 属性。

留神:在大局检索形式下,match()
即不提供与子表达式匹配的文本的消息,也不证明每一个匹配子串的职务。假若您供给这几个全局检索的消息,能够使用
RegExp.exec()。

参数为字符串的例证:

 

var str="Hello world!"
document.write(str.match("world") + "<br />")

参数为正则表达式的例子:

 

 

var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g))

3:replace()
方法用于在字符串中用一些字符替换另一些字符,或交流叁个与正则表明式匹配的子串。

 

stringObject.replace(regexp/substr,replacement)
参数 描述
regexp/substr

必需。规定子字符串或要替换的模式的 RegExp 对象。

请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。

replacement 必需。一个字符串值。规定了替换文本或生成替换文本的函数。

返回值

四个新的字符串,是用 replacement 替换了 regexp
的率先次匹配或富有匹配之后收获的。

说明

字符串 stringObject 的 replace() 方法执行的是寻找并替换的操作。它将在
stringObject 中查找与 regexp
相匹配的子字符串,然后用 replacement 来替换那几个子串。如若 regexp
具有全局标志 g,那么 replace()
方法将替换全体匹配的子串。不然,它只替换第3个匹配子串。

replacement 能够是字符串,也能够是函数。假若它是字符串,那么每一种匹配都将由字符串替换。但是replacement 中的 $
字符具有特定的含义。如下表所示,它表明从形式匹配获得的字符串将用来替换。

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

瞩目:ECMAScript v3 规定,replace() 方法的参数 replacement
能够是函数而不是字符串。在那种景观下,每一种匹配都调用该函数,它回到的字符串将用作替换文本使用。该函数的第两个参数是匹配方式的字符串。接下来的参数是与格局中的子表明式匹配的字符串,能够有
0 个或多个这么的参数。接下来的参数是一个平头,注明了合作在 stringObject
中出现的岗位。最终二个参数是 stringObject 自身。

字符串替换:

var str="Visit Microsoft!"
document.write(str.replace(/Microsoft/, "W3School"))

全局替换:

var str="Welcome to Microsoft! "
str=str + "We are proud to announce that Microsoft has "
str=str + "one of the largest Web Developers sites in the world."

document.write(str.replace(/Microsoft/g, "W3School"))

返回的结果:Welcome to W3School! We are proud to announce that W3Schoolhas one of the largest Web Developers sites in the world.

使用正则表达式:

name = '"a", "b"';
name.replace(/"([^"]*)"/g, "'$1'");

使用函数:

name = 'aaa bbb ccc';
uw=name.replace(/\b\w+\b/g, function(word){
  return word.substring(0,1).toUpperCase()+word.substring(1);}
  );

4:split() 方法用于把一个字符串分割成字符串数组。

语法

stringObject.split(separator,howmany)
参数 描述
separator 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。
howmany 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

返回值

三个字符串数组。该数组是通过在 separator 钦点的边界处将字符串
stringObject
分割成子串创制的。再次来到的数组中的字串不包涵 separator 自身。

但是,如果 separator 是包涵子表明式的正则表明式,那么重回的数组中回顾与那个子表达式匹配的字串(但不包涵与总体正则表明式匹配的公文)。

提示和注释

注明:假诺把空字符串 (“”) 用作 separator,那么 stringObject
中的每种字符之间都会被分开。

评释:String.split()
执行的操作与 Array.join 执行的操作是相反的。

修饰符

修饰符 描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。

方括号

方括号用于查找有个别范围内的字符:

表达式 描述
[abc] 查找方括号之间的任何字符。
[^abc] 查找任何不在方括号之间的字符。
[0-9] 查找任何从 0 至 9 的数字。
[a-z] 查找任何从小写 a 到小写 z 的字符。
[A-Z] 查找任何从大写 A 到大写 Z 的字符。
[a-Z] 查找任何从小写 a 到大写 Z 的字符。
[adgk] 查找给定集合内的任何字符。
[^adgk] 查找给定集合外的任何字符。
[red|blue|green] 查找任何指定的选项。

元字符

元字符(Metacharacter)是富有特有含义的字符:

元字符 描述
. 查找单个字符,除了换行和行结束符。
\w 查找单词字符。
\W 查找非单词字符。
\d 查找数字。
\D 查找非数字字符。
\s 查找空白字符。
\S 查找非空白字符。
\b 查找位于单词的开头或结尾的匹配。
\B 查找不处在单词的开头或结尾的匹配。
\0 查找 NUL 字符。
\n 查找换行符。
\f 查找换页符。
\r 查找回车符。
\t 查找制表符。
\v 查找垂直制表符。
\xxx 查找以八进制数 xxx 规定的字符。
\xdd 查找以十六进制数 dd 规定的字符。
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

量词

量词 描述
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。
n{X} 匹配包含 X 个 n 的序列的字符串。
n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
n{X,} 匹配包含至少 X 个 n 的序列的字符串。
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。
?=n 匹配任何其后紧接指定字符串 n 的字符串。
?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
更多内容