zz JavaScript中的正则表达式解析
JavaScript中的正则表达式解析
近期在项目中大量使用正则表达式,深感其灵活与强大,特整理这篇关于JavaScript正则表达式的解析文章,供参考学习。
正则表达式(regular expression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配或代替一个字符串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。要为一个单独的正则表达式添加属性,可以使用正则表达式构造函数(constructor function);预定义的正则表达式对象拥有静态属性,这些属性会在任意正则表达式被使用时被设置。
一、正则表达式的创建
有两种创建方式:文本格式、正则表达式构造函数
1. 文本格式
/pattern/flags
2. 正则表达式构造函数
new RegExp("pattern"[,"flags"]);
参数说明
pattern:正则表达式文本flags(可选):匹配标识,可选值如下:g:全局匹配i:忽略大小写gi:全局匹配 + 忽略大小写
注意事项
- 文本格式的参数无需加引号,构造函数的参数需要引号。例如:
/ab+c/i和new RegExp("ab+c","i")功能一致。 - 构造函数中,特殊字符需要转义(在特殊字符前加
\\)。例如:re = new RegExp("\\w+")。
二、正则表达式中的特殊字符
| 字符 | 含意 |
|---|---|
\\ | 1. 转意:\ 后字符不按原意义解释(如/\b/匹配单词边界,而非字符b);2. 还原正则功能字符:/a\*/仅匹配a*,而非匹配多个a |
^ | 匹配输入/一行的开头(如/^a/匹配an A,不匹配An a) |
$ | 匹配输入/一行的结尾(如/a$/匹配An a,不匹配an A) |
* | 匹配前面元字符0次或多次(如/ba*/匹配b、ba、baa、baaa) |
+ | 匹配前面元字符1次或多次(如/ba+/匹配ba、baa、baaa) |
? | 匹配前面元字符0次或1次(如/ba?/匹配b、ba) |
(x) | 匹配x并将x保存到$1...$9变量中 |
| `x | y` |
{n} | 精确匹配n次 |
{n,} | 匹配n次及以上 |
{n,m} | 匹配n-m次 |
[xyz] | 字符集,匹配集合中任一字符 |
[^xyz] | 匹配非该集合中的任意字符 |
[\b] | 匹配一个退格符 |
\b | 匹配一个单词的边界 |
\B | 匹配一个单词的非边界 |
\cX | 匹配控制符(如/\cM/匹配Ctrl-M) |
\d | 匹配数字字符(等价/[0-9]/) |
\D | 匹配非数字字符(等价/[^0-9]/) |
\n | 匹配换行符 |
\r | 匹配回车符 |
\s | 匹配空白字符(含\n、\r、\f、\t、\v等) |
\S | 匹配非空白字符(等价/[^\n\f\r\t\v]/) |
\t | 匹配制表符 |
\v | 匹配垂直制表符 |
\w | 匹配可组成单词的字符(含字母、数字、下划线,等价[a-zA-Z0-9_]) |
\W | 匹配不可组成单词的字符(等价[^a-zA-Z0-9_]) |
三、正则表达式实际应用示例
1. E-mail地址验证
function test_email(strEmail) {
var myReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;
if(myReg.test(strEmail)) return true;
return false;
}
2. HTML代码屏蔽
function mask_HTMLCode(strInput) {
var myReg = /<(\w+)>/;
return strInput.replace(myReg, "<$1>");
}
四、正则表达式对象的属性及方法
1. 静态属性
预定义正则表达式对象的静态属性(执行exec/test后赋值):input、multiline、lastMatch、lastParen、leftContext、rightContext、$1到$9(input和multiline可预设)。
2. 核心属性
| 属性 | 含义 |
|---|---|
$1...$9 | 匹配到的子串(若存在) |
$_ | 同input |
$* | 同multiline |
$& | 同lastMatch |
$+ | 同lastParen |
| `$`` | 同leftContext |
$' | 同rightContext |
constructor | 创建对象的函数原型 |
global | 是否全局匹配(布尔型) |
ignoreCase | 匹配是否忽略大小写(布尔型) |
input | 被匹配的字符串 |
lastIndex | 最后一次匹配的索引 |
lastParen | 最后一个括号括起来的子串 |
leftContext | 最近一次匹配左侧的子串 |
multiline | 是否多行匹配(布尔型) |
prototype | 允许为对象附加属性 |
rightContext | 最近一次匹配右侧的子串 |
source | 正则表达式模式 |
3. 方法
| 方法 | 含义 |
|---|---|
compile | 正则表达式编译/比较 |
exec | 执行查找(返回匹配结果) |
test | 进行匹配(返回布尔值) |
toSource | 返回对象定义(可用于创建新对象) |
toString | 返回对象的字符串形式 |
valueOf | 返回对象的原始值 |
方法示例
// 匹配"Smith, John"并输出
var reg = /(\w+), (\w+)/;
var str = "Smith, John";
reg.exec(str);
console.log(str); // 输出"Smith, John"
转载自 闪动联盟:http://www.85flash.com/Get/JavaScript/2006-3-28/180633705_2.htm