zz JavaScript中的正则表达式解析

ChenReal

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/inew 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*/匹配bbabaabaaa
+匹配前面元字符1次或多次(如/ba+/匹配babaabaaa
?匹配前面元字符0次或1次(如/ba?/匹配bba
(x)匹配x并将x保存到$1...$9变量中
`xy`
{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后赋值):inputmultilinelastMatchlastParenleftContextrightContext$1$9inputmultiline可预设)。

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