文章目录
前言
正则表达式(Regular Expression ,简称RegEx),是用来匹配一系列符合某个规则的字符串的表达式,正则表达式独立于编程语言,几乎所有的编程语言甚至文字处理软件都支持正则表达式。
一、什么是正则表达式?
正则表达式是由一个字符序列形成的搜索模式
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容
正则表达式可以是一个简单的字符,或一个更复杂的模式
正则表达式可用于所有文本搜索和文本替换的操作
二、正则表达式的定义
定义正则表达式有两种构造形式,一种是普通方法;另一种是构造函数方式。
1.普通方法
普通方法可以通过在一对分隔符之间放入表达式模式的各种组件来构造一个正则表达式其语法如下:
var reg=/表达式/附加参数
参数说明如下。
(1)表达式:一个字符串代表了某种规则,其中可以使用某些特殊字符来代表特殊的规则。
(2)附加参数:用来扩展表达式的含义,主要有以下3个参数
- g:代表可以进行全局匹配。
- i:代表不区分大小写匹配。
- m:代表可以进行多行匹配。
上面3个附加参数可以根据任务组合,代表复合含义,也可以不加参数。例如:
var reg=/dog/
var reg=/dog/i
2.构造函数方法
构造函数方式的语法如下
var reg=new RegExp("表达式","附加参数")
其中,表达式和附加参数与上面普通方式中定义的含义相同,例如:
var reg=new RegExp("dog")
var reg=new RegExp("dog","i")
三、正则表达式使用方法
- split()
- replace()
- search()
- match
1.replace()
常用的使用正则表达式的方法,支持传入字符串或正则表达式
var a='1231'
var b=a.replace(/1/g,0)
//b:0230
2.search()
返回要查找的字符第一次出现的位置下标,若未找到返回-1
var a='1231'
var b=a.search(/1/g)
//b:0
3.match()
返回所有要查找的字符的值,并存入数组
var a='1231'
var b=a.match(/1/g)
//b:["1","1"]
四、正则表达式操作方法
正则表达式对象RegExp有3个方法,如下表所示
方法 | 描述 |
---|---|
compile() | 编译正则表达式 |
exec() | 检索字符串中指定的值,返回找到的值,并确定其位置 |
test() | 检索字符串中指定的值,返回true或false |
1.compile()
compile()方法用于在脚本执行过程中编译正则表达式,也可用于改变和重新编译正则表达式,语法如下:
正则表达式对象实例.compile("表达式","附加参数")
//例:在字符串中全局搜索man,并用person替换。然后通过compile()方法,改变正则表达式,用person替换man或woman,代码如下:
<script type="text/javascript">
var str="Every man in the world! Every woman on earth!"
patt=/man/g
str2=str.replace(patt,"person")
document.write(str2+"<br />")
patt=/(wo)?man/g
patt.compile(patt)
str2=str.replace(patt,"person")
document.write(str2)
</script>
//代码运行后输出:
Every person in the world! Every woperson on earth!
Every person in the world! Every person on earth!
2.exec()
exec()方法用于检索字符串中的正则表达式的匹配,如果exec()找到了匹配的文本,则返回一个结果数组;否则返回null。语法如下:
正则表达式对象实例.exec("字符串")
//例:匹配“广科”并返回其位置
<script type="text/javascript">
var str="欢迎来到广科院"
var reg=new RegExp("广科","g")
var result
while((result=reg.exec(str))!=null){
document.write(result)
document.write("<br />")
document.write(reg.lastIndex)
}
</script>
//代码运行后输出:
广科
6
3.test()
test()方法用于检索一个字符串是否匹配某个模式,如果字符串中含有与正则表达式相匹配的文本,则返回true;否则返回false。语法如下:
正则表达式对象实例.test("字符串")
//使用test()方法匹配dog,不区分大小写。
<script type="text/javascript">
var str = "my Dog"
var reg = /dog/i
var result = reg.test(str)
alert(result)
</script>
//代码运行后输出:
true
五、正则表达式的模式
从规范上说,正则表达式的模式分为简单模式和复合模式。
1.简单模式
简单模式是指通过普通字符的组合来表达的模式,例如:
var reg = /abc0d/
可见简单模式只能表示具体的匹配,如果要匹配一个邮箱地址或一个电话号码,就不能使用具体的匹配,这时就要用到复合模式。
2.复合模式
复合模式是指含有通配符来表达的模式,例如:
var reg = /a+b?\w/
其中的+、?和\w都属于通配符,代表着特殊的含义。因此复合模式可以表达更为抽象化的逻辑。
下面着重介绍一下正则表达式常用的符号、各个通配符的含义及其使用。
正则表达式中可以使用方括号,方括号用于查找某个范围内的字符,见表2-1.
表2-1:
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符 |
[^abc] | 查找任何不在方括号之间的字符 |
[0~9] | 查找任何从0~9的数字 |
a~z | 查找任何从小写a~z的字符 |
[A~Z] | 查找任何从大写A~Z的字符 |
正则表达式中常用字符的含义见表2-2。
表2-2:
符号 | 描述 |
---|---|
/…/ | 代表一个模式的开始和结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
\s | 任何空白字符 |
\S | 任何非空白字符 |
\d | 匹配一个数字字符,等价于[0~9] |
\D | 除了数字之外的任何字符,等价于[^0~9] |
\w | 匹配一个数字、下画线或字母字符,等价于[A~Z a~z 0~9_] |
\W | 任何非单字字符,等价于[^a~z A~Z 0~9_] |
. | 除了换行符之外的任意字符 |
正则表达式中常用量词的含义见表2-3。
表2-3:
符号 | 描述 |
---|---|
* | 出现0次或连续多次 |
+ | 出现至少一次 |
? | 出现0次或者一次 |
{n} | 连续出现n次 |
{n,} | 连续出现至少n次 |
{n,m} | 连续出现至少n次,至多m次 |
3.子匹配
子匹配是正则表达式语法中的分组概念,在正则表达式中用括号把一些字符串括起来表示一个子匹配,并按括号顺序编号,同时在字符串匹配时把子匹配结果存储在缓冲区,并作为查询的结果返回。
例如:
var reg = /(ab)c/
其中,/(ab)c/中(ab)就是一个子匹配,表达式在搜索时不仅记录整个表达式的匹配结果,还把子匹配ab记录在缓冲区,以共查询。