什么是正则表达式
正则表达式是一个描述字符模式的对象。主要用来验证客户端的输入数据,用户填写完表单信息提交后,就会传递给后台服务器,服务器会通过PHP等后台脚本进行处理,因为客户端验证,节约了大量的服务器资源,并提供了良好的用户体验。
创建正则表达式
创建正则表达式有两种方法:
-
使用RegExp构建函数接收两个参数:一个是要匹配的字符串,一个是模式修饰符(可选)
var pattern = new RegExp('box');
-
字面量方式创建,直接使用两个斜杠。在第二个斜杠后面加上模式修饰符(可选)
var pattern = /box/ flags;
//两个斜杠和box之间不能有空格
参数 | 含义 |
---|---|
g | 全局模式(global) |
i | 不区分大小写(case-insensitive) |
m | 多行模式(multiline) |
模式修饰符的可选参数:
参数 | 含义 |
---|---|
g | 全局模式(global) |
i | 不区分大小写(case-insensitive) |
m | 多行模式(multiline) |
测试正则表达式
exct()
接收一个参数,该参数和模式匹配,把模式作为数组返回;未匹配到返回null
test()
接收一个参数,该参数和模式匹配,返回true
,否则返回false
使用字符串的正则表达式方法
String对象中的正则表达式方法:
方法 | 含义 |
---|---|
match(pattern) |
返回匹配到模式中的字符串或null
|
replace(pattern,replacement) |
用replacement 替换pattern
|
search(pattern) |
返回字符串中pattern 开始的位置 |
split(pattern) |
返回用空格拆分的数组 |
例:
var pattern = /box/ig;
var str = "This is Box! This is Box!";
alert(str.match(pattern)); //Box Box
开启全局模式,将所有匹配的字符串组合成数组;
未开启全局模式,匹配到第一个字符串就返回。
var pattern = /box/ig;
var str = "This is Box! This is Box!";
alert(str.replace(pattern,'Tom')); //This is Box! This is Box!
开启全局模式,将匹配到的字符串全部替换掉;
未开启全局模式,只替换掉第一个查找到的字符串。
var pattern = /box/i;
var str = "This is Box! This is Box!";
alert(str.search(pattern)); //8
查找返回的位置:查到返回对应的位置,未查到返回-1
;无需全局模式。
var pattern = / /i;
var str = "This is Box! This is Box!";
alert(str.split(pattern));
返回用空格拆分的数组
属性 | 短名 | 含义 |
---|---|---|
input | $_ | 当前被匹配的字符串 |
lastMatch | $& | 最后一个匹配字符串 |
lastParen | $+ | 最后一对圆括号内的匹配子串 |
leftContext | $` | 最后一次匹配前的字符串 |
multiline | $* | 用于指定是否所有的表达式都用于多行的,返回布尔值 |
rightContext | $' | 最后一次匹配之后的字符串 |
RegExp对象的静态属性:
属性 | 短名 | 含义 |
---|---|---|
input | $_ | 当前被匹配的字符串 |
lastMatch | $& | 最后一个匹配字符串 |
lastParen | $+ | 最后一对圆括号内的匹配子串 |
leftContext | $` | 最后一次匹配前的字符串 |
multiline | $* | 用于指定是否所有的表达式都用于多行的,返回布尔值 |
rightContext | $' | 最后一次匹配之后的字符串 |
所有的属性都可以用短名来操作,其中$_
可以用点表示法来操作,其他都不可以。
正则表达式元字符是包含特殊含义的字符,可以控制匹配模式的方式。反斜杠后的元字符将失去其含义。
获取控制
字符类:单个字符和数字
元字符/元符号 | 匹配情况 |
---|---|
. | 匹配除换行符号外的任意字符 |
[a-zA-Z0-9] | 匹配方括号中任意字符 |
[^a-zA-Z0-9] | 匹配不是方括号中任意字符 |
\d | 匹配任意数字和[0-9]相同 |
\D | 匹配非数字和[^ 0-9]相同[^a-zA-Z0-9] |
\w | 匹配字母和数字及_ |
\W | 匹配非字母和数字及_ |
字符类:空白字符
元字符/元符号 | 匹配情况 |
---|---|
\0 | 匹配null 字符 |
\b | 匹配空格字符 |
\f | 匹配进纸字符 |
\n | 匹配换行符 |
\r | 匹配回车字符 |
\t | 匹配制表符 |
\s | 匹配空白字符、空格、制表符和换行符 |
\S | 匹配非空白字符 |
字符类:锚字符
元字符/元符号 | 匹配情况 |
---|---|
^ | 行首匹配 |
$ | 行尾匹配 |
\A | 只有匹配字符串开始处 |
\b | 匹配单词边界,词在[]内时无效 |
\B | 匹配非单词边界 |
\G | 匹配当前搜索的开始位置 |
\Z | 匹配字符串结束处或行尾 |
\z | 只匹配字符串结束处 |
字符类:重复字符
元字符/元符号 | 匹配情况 |
---|---|
x? | 匹配0个或1个x
|
x* | 匹配0个或1个或多个x
|
x+ | 匹配1个或多个x
|
(xyz)+ | 匹配至少一个(xyz) |
x{m,n} | 匹配最少m个、最多n个x
|
字符类:替代字符
元字符/元符号 | 匹配情况 |
---|---|
(string) | 分组表示一个字符,用圆括号表示 |
\1 或$1 | 匹配第一个分组中的内容 |
\2 或$2 | 匹配第二个分组中的内容 |
\3 或$3 | 匹配第三个分组中的内容 |
贪婪和惰性(非贪婪)
贪婪是尽可能多的匹配内容,惰性(非贪婪)这是尽可能少的匹配内容
贪婪是从结尾开始匹配,惰性(非贪婪)是从开头开始匹配
贪婪 | 惰性 |
---|---|
+ | +? |
? | ?? |
* | *? |
{n} | {n}? |
{n,} | {n,}? |
{n,m} | {n,m}? |
下面例子匹配8和8中的内容,把他替换成QQ
var pattern = /8(.+?)8/g;
var str = 'This is 8google8, That is 8google8, There is 8google8';
var result = str.replace(pattern,'QQ');
document.write(result);
输出结果:This is QQ, That is QQ, There is QQ
错误匹配:8google, That is 8
换成QQ
,google
不变,8, There is 8
替换成QQ
,google8
不变,就是我们看到的结果。
var pattern = /8(.+?)8/g;
var str = 'This is 8google, That is 8google8, There is 8google8';
var result = str.replace(pattern,'QQ');
document.write(result);
输出结果:This is QQgoogleQQgoogle8
错误匹配:8google8
换成QQ
,google
不变,8, That is 8
替换成QQ
,google
不变,8, There is 8
替换成QQ
,google8
不变,就是我们看到的结果。
var pattern = /8(.+?)8/g;
var str = 'This is 8google8google8, That is 8google8, There is 8google8';
var result = str.replace(pattern,'>QQ');
document.write(result);
输出结果:This is QQgoogleQQgoogleQQgoogle8
网友评论