JavaScript的正则表达式类

来源:互联网 发布:大数据产业园发展模式 编辑:程序博客网 时间:2024/05/29 02:22

   正则表达式是JavaScript用来作模式匹配的类。它可以用来检查一串字符窜中是否有非法字符,也可以返回一串字符窜中想要的字符。

1.      如何定义正则表达式

//定义一个以s结尾的正则表达式

var pattern = /s$/;  

var pattern = new RegExp(“s$”);

2.      正则表达式的字符

1.      下面的标点符号在正则表达式里有特殊的含义

^ $ . * + ? = ! : | \ / ( ) [ ] { }

如果想要匹配字符,在字符前面加上\。比如说/\^/匹配的字符是^

2.      在匹配重复的字符串时有两种匹配方法:

贪婪重复:尽可能多地匹配字符

非贪婪重复:尽可能少地匹配字符

正则表达式的重复字符({},?,+*)默认情况下都是贪婪匹配。在每一个重复字符后加上?就可以变成非贪婪重复。

比如说/a+/ 在匹配字符串“aaab”的时候匹配的是aaa

/a+?/在匹配同一串字符串是匹配的是a

3.      圆括号在正则表达式中有多重意思。

给字符组团。在用于重复字符等字符的时候可以把它们当成一个字符。比如说/(abcd)+/匹配出现1次或多次的abcd组合。

定义子匹配同时可以存储子匹配的位置。可以用\+数字匹配。

比如:/([‘”])[^’”]*\1/

3.      String有四种支持模式匹配的方法.search(),replace(),match(),split().

1.      search().

参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,如果找不到匹配的,将返回-1.

如果参数不是正则表达式,首先会通过RegExp构造函数将它转换成正则表达式,search()方法不支持全局搜索,会忽略表达式中g

2.      replace()

用于执行检索和替换操作。第一个参数是正则表达式,第二个参数是要进行替换的字符。该方法支持全局搜索,如果表达式中有g,就会将匹配的所有字符串都替换掉,如果没有,只会替换第一个。如果第一个参数是字符串而不是正则表达式,则会直接用字符串匹配。

举例:text.replace(/javascript/gi,”JavaScript”)

     Var text =/’([^’”])’/;

     text.replace(text,’”$1”’);

     第二个例子中$1指代的是字符中用圆括号括起的字符串,利用了圆括号的组合和记忆功能。

3.      match()

该函数的第一个参数是正则表达式,返回的值是一个由匹配结果组成的数组。如果该正则表达式有设置全局修饰符g,返回的将是所有匹配的结果。

4.      split()

可以将字符串拆分成一个子串组成的数组,分隔符就是split的参数。

“123,234,234”.split(“,”);

“1,2,2,4”.split(/\s*,\s*/)

4.      RegExp对象

1.      RegExp构造函数

第一个参数是正则表达式的主体部分,第二个参数是可选的,指定正则表达式的修饰符。

2.      RegExp的属性

source : 一个只读的字符串,包含正则表达式的文本。

global : 布尔值,说明这个正则表达式是否带有g

ignoreCase : 布尔值,说明这个正则表达式是否带有i

multiline :布尔值,说明这个正则表达式是否带有m

lastindex:可读可写的整数,如果匹配模式带有g,这个属性存储在整个字符串中下一次检索的开始位置。

3.      RegExp的方法

1.      exec()

参数是一个字符串,忽略g,返回一个数组,数组的第一项是匹配的字符串,余下的元素是与圆括号内子表达式相匹配的子串。数组的index属性包含了发生匹配的字符位置,属性input引用的是正在检索的字符串。如果正则表达式中有g修饰符,RegExplastindex将会设置为紧挨着子串的匹配位置。

2.      test ()

参数是一个字符串,返回值是布尔值。如果包含正则表达式的一个匹配结果,就返回true

字符

匹配什么

例子

字母数字字符

匹配本身

\abcd12345\匹配字符串” 1abcd123456”中的” abcd12345”

\0

空字符(\u0000

 

\t

Tab制表符(\u0009)

 

\n

Newline换行符(\u000A)

 

\v

Vertical tab垂直制表符(\u000B)

 

\f

Form feed换页符(\u000C)

 

\r

Carriage return回车符 (\u000D)

 

\x nn

由十六进制数字nn指定的拉丁字符

\x0A \n是一样的

\u xxxx

由十六进制xxxx指定的Unicode字符

\u0009 \t是一样的。

\c X

控制字符^X.

\cJ\n是一样的

[…]

匹配方括号中出现的任一字符

/[abcd]/

[^….]

方括号中出现的字符都不匹配

/[^abcd]/

.

任意字符除了换行或者其他unicode行终止符

/./

\w

任意ascii字符组成的单词,相当于[a-zA-Z0-9]

 

\W

任意不是ascii字符组成的单词。相当于[^a-zA-Z0-9]

 

\s

任意Unicode空白字符

 

\S

任意不是Unicode空白字符的字符

 

\d

任意ASCII数字。相当于[0-9]

 

\D

除了ASCII数字之外的其他字符

 

[\b]

退格直接量(特例)

 

{n,m}

匹配前一项至少出现n次,最多出现m

/\d{2,4}/ 匹配2-4个数字

{n,}

匹配前一项n次或者多次

/\d{3,}/ 匹配数字至少出现3

{n}

字符出现n

/\d{8}/匹配数字出现8

字符出现0次或1

/\d?/

+

字符出现1次或多次

/\s+java\s+/

*

字符出现0次或多次

/[^(]*/

|

选择。匹配左边子语句或者右边的子语句

 

(….)

组合。将几个项组合为一个单元,这个单元可通过“*+,?,|”等符号加以修饰,而且可以记住和这个组合相匹配的字符串以供此后的引用使用

/(abcd)+/

/(ab)\d+\1/

(?:…)

组合,和(…)类似,但是没有记忆功能

/(?:abdc)\w*/

\n

和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式,组索引是从左到右的左括号数

/(ab)\d+\1/

\b

匹配一个单词的边界

 

^

匹配字符串的开头,在多行检索中,匹配一行的开头

 

$

匹配字符串的结尾,在多行检索中,匹配一行的结尾

 

(? =p)

零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符

 

\B

匹配非单词边界的位置

 

(?!p)

零宽负向先行断言,要求接下来的字符都不与p匹配

 

i

忽略大小写

 

g

全局匹配,找到所有的匹配,而不是找到一个就返回

 

m

多行匹配模式,^匹配一行的开头和字符串的开头,$匹配一行的结尾和字符串的结尾

 

 

原创粉丝点击