好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

JavaScript RegExp

JavaScript RegExp

RegExp 构造 函数 创建了 一个 正则表达式对象,用于将文本与 一个 模式匹配。

RegExp 的实例用于 生成 一个 正则表达式,利用正则表达式从字符串中匹配想要的 内容 。

正则表达式不是 JavaScript 的 一个 子 内容 ,也并非 JavaScript 独有,需要学习正则表达式可以查阅相对应的文献。

1. 创建实例

创建 一个 RegExp 实例,只需要将其当作构造 函数 使用:

  var  regexp  =   new   RegExp  (  /^a*$/  )  ; 

regexp .  test  (  'aaaa'  )  ;   // true 
regexp .  test  (  'a'  )  ;   // true 
regexp .  test  (  'a1'  )  ;   // false 
 

上面这个例子创建了 一个 规则为 从开头到结尾必须是任意个a 正则表达式。

注意上面的例子中实际上是把 一个 正则表达式字面量 作为参数传递给了 RegExp 构造 函数 。

test 方法 可以用来校验某个字符串能否使用这个正则表达式匹配到目标。

如果不想传递字面量,也可以传递 一个 正则表达式字符串,这个时候不需要使用 / 包裹,而字面量是需要 / 包裹的。

  var  regexp  =   new   RegExp  (  '^a*$'  )  ;   // 不需要使用 / 将表达式包裹起来 

regexp .  test  (  'aaaa'  )  ;   // true 
regexp .  test  (  'a'  )  ;   // true 
regexp .  test  (  'a1'  )  ;   // false 
 

这样创建出来的和传递正则表达式字面量的 效果 一样。

传递字符串的时候还能传递第二个参数,作为正则表达式的符号,部分文献也称其为描述符。

  var  regexp1  =   new   RegExp  (  '^a*$'  ,   'i'  )  ; 
 var  regexp2  =   new   RegExp  (  '^a*$'  )  ; 

 var  str  =   'AAAAA'  ; 

console .  log  ( regexp1 .  test  ( str )  )  ;   //  输出 :true 
console .  log  ( regexp2 .  test  ( str )  )  ;   //  输出 :false 
 

符号 i 表示忽略大小写,所以 regexp2 无法在 str 中匹配到值。

如果需要多个符号,则将多个符号放在一起作为字符串即可。

  var  regexp  =   new   RegExp  (  '^a*$'  ,   'igm'  )  ; 
 

2. 字面量

通常构造 函数 会在不确定表达式的 内容 情况下使用,预定义好的正则表达式通常都会用字面量来表示。

正则表达式的字面量使用一对 / 进行包裹。

  var  regexp  =   /^a&/  ; 
 

这里不需要引号进行包裹,使用引号就变成了字符串。

如果需要加入符号,则跟在末尾即可。

  var  regexp1  =   /^a*$/g  ; 
 var  regexp2  =   /^a*$/ig  ; 
 

3. 符号

在 ES6 之前,有三种符号。

g 全局匹配,找到所有匹配,而不是在第 一个 匹配后停止

  var  regexp1  =   /a/g  ; 
 var  regexp2  =   /a/  ; 

 var  str  =   'abcdeabcde'  ; 

console .  log  ( str .  match  ( regexp1 )  )  ;   // 匹配到两个 a 
console .  log  ( str .  match  ( regexp2 )  )  ;   // 只匹配到 一个 ,并返回相应信息 
 

可以看到, regexp1 能匹配到两个 a。

i 忽略大小写

  var  regexp1  =   /apple/i  ; 
 var  regexp2  =   /apple/  ; 

 var  str  =   'AN APPLE A DAY KEEPS THE DOCTOR AWAY.'  ; 

console .  log  ( str .  match  ( regexp1 )  )  ;   // 可以找到 一个  
console .  log  ( str .  match  ( regexp2 )  )  ;   // 找不到  输出 :null 
 

regexp2没有忽略大小写,所以是无法匹配到 apple 的。

m 多行匹配

多行匹配模式下,开头和末尾就不是整个字符串的开头和末尾了,而是一行的开头和末尾。

目前 ES6 提供了三种新的描述符,分别为 u(Unicode 模式),y(粘连模式),s(dotAll 模式)。

4. 常用的正则表达式汇总

正则表达式不一定通用,可能需要结合业务的实际场景来做调整。

4.1 URL

  /(http[s]?:\/\/)?[^\s(["<,>]*\.[^\s[",><]*/ 
 

4.2 纯数字

  /^[0-9]*$/ 
 

4.3 邮箱

  /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/ 
 

4.4 中文 与全角符号

  /[\u3000-\u 301 e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]/ 
 

4.5 身份证(不验证是否合法)

  /\d{15}(\d\d[0-9xX])?/ 
 

4.6 仅包含 英文字母 的字符串

  /^[A-Za-z]+$/ 
 

4.7 正整数

  /^\d+$/ 
 

4.8 负整数

  /^((-\d+)|(0+))$/ 
 

4.9 数字(正负数、小数)

  /^(\-|\+)?\d+(\.\d+)?$/ 
 

4.10 IPv4

  /^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$/ 
 

5. 小结

正则表达式字面量需要使用 / 包裹,通常字面量会用于写死固定的正则表达式,如果需要动态 生成 ,都会使用构造 函数 的方式。

JavaScript JSON ? ?JavaScript Date

查看更多关于JavaScript RegExp的详细内容...

  阅读:40次

上一篇

下一篇

第1节:什么是 JavaScript    第2节:学习环境准备    第3节:调试方案    第4节:JavaScript 变量    第5节:JavaScript 数据类型    第6节:JavaScript if 语句    第7节:for 语句    第8节:JavaScript 算数运算符    第9节:JavaScript 比较运算符    第10节:JavaScript 逻辑运算符    第11节:JavaScript 函数    第12节:JavaScript 表达式    第13节:JavaScript 对象    第14节:JavaScript 字符串    第15节:JavaScript 数字    第16节:JavaScript 数组    第17节:JavaScript switch 语句    第18节:JavaScript while 语句    第19节:JavaScript 的 break 与 continue    第20节:JavaScript with    第21节:document.cookie    第22节:JavaScript Function    第23节:JavaScript Math    第24节:JavaScript Date    第25节:JavaScript RegExp    第26节:JavaScript JSON    第27节:什么是 DOM    第28节:DOM 和 JavaScript 的关系    第29节:获取和操作 DOM 节点    第30节:DOM 与事件    第31节:DOM 事件绑定    第32节:DOM 事件对象    第33节:DOM 事件流    第34节:事件相关的优化    第35节:自定义事件    第36节:表单校验    第37节:什么是 BOM    第38节:常用的 BOM 相关对象    第39节:BOM 常用属性和方法    第40节:AJAX    第41节:异常处理    第42节:三元运算符    第43节:逗号操作符    第44节:void    第45节:typeof    第46节:delete 操作符    第47节:debugger    第48节:getter & setter    第49节:new 运算符与构造函数    第50节:JavaScript 原型    第51节:JavaScript instanceof    第52节:JavaScript this    第53节:严格模式    第54节:作用域    第55节:闭包    第56节:变量提升    第57节:对象包装器    第58节:Lodash    第59节:moment    第60节:swiper    第61节:ECMAScript 6    第62节:Node.js    第63节:Babel    第64节:CSS 预处理器    第65节:代码规范    第66节:TypeScript    第67节:WebComponents    第68节:Vue、React、Angular    第69节:小程序    第70节:JavaScript 关键字    第71节:分号导致的问题    第72节:对象属性访问问题    第73节:this 使用问题    第74节:浮点数精度问题    第75节:独一无二的 NaN    第76节:避免全局污染    第77节:控制台观察对象问题    第78节:根据环境选择语言特性    第79节:相关资源