正则表达式介绍

1 正则表达式介绍

在JavaScript中,正则表达式是一个用来 匹配 的 并包含 元字符或普通字符 的字符串对象。

在JavaScript中,正则表达式是对象。
  • 使用正则表达式的目的:提高效率

1.1 正则表达式的作用

  • 1 匹配
  • 2 提取
  • 3 替换

1.2 识别正则表达式

"123" "abc" "just do IT"

1.3 元字符

  • 在正则表达式中具有特殊意义的专用字符
符号 含义
基本元字符  
. 匹配除换行符外的任意单个字符
(x) 分组
[xyz] 字符集合,匹配集合中的任意一个字符,可以用‘-‘指定范围
[^xyz] 反义字符集合,匹配任意不在集合中的一个字符
首尾元字符  
^ 匹配开头位置
$ 匹配结尾位置
限定元字符  
x* 匹配前面的模式 x 出现0次或多次
x+ 匹配模式 x 出现1次或多次
x? 匹配模式 x 出现0次或1次
x{n} n是一个正整数,模式 x 连续出现n次时匹配
x{n,} n是一个正整数,模式 x 连续出现至少n次时匹配
x{n,m} n和m是正整数,模式 x 连续出现至少n次,至多m次时匹配
\ 转义字符,让普通字符具有特殊用处,让特殊字符不具有特殊用途
简写元字符  
\d 匹配任意一个数字0到9,等价于: [0-9]
\D 匹配任意一个非数字,等价于:[^0-9]
\w 匹配任意一个字母、数字、下划线,等价于:[A-Za-z0-9_]
\W 匹配任意一个非字母、数字、下划线的字符,等价于:[^A-Za-z0-9_]
\s 匹配一个空白符
\S 匹配一个非空白符
  • x|y:匹配 x 或 y。注意:|的优先级最低
  • 贪婪模式: 尽量多的去匹配
? 的其他用处:
范围匹配在正则中都是默认的贪婪模式
添加 ? 表示取消贪婪模式(跟在次数限定字符后面)

取消了贪婪模式之后,就会尽量少的匹配

2 使用正则表达式

2.1 创建正则表达式

  • 语法
// 1 对象形式
var r = new RegExp("正则表达式");
var r = new RegExp(/正则表达式/);

// 2 字面量形式
var r = /正则表达式/;
  • 案例:从字符串 "abcdefgh" 中找出 "e" 的位置
// 不使用正则
var str = "abcdefgh";
for(var i = 0; i < str.length; i++) {
    if(str.charAt(i) === "e") {
        break;
    }
}
console.log(i);

// 使用正则表达式 实现相同功能
var str = "abcdefgh";
var r = new RegExp("e");
var o = r.exec(str);

// index 表示匹配到的字符在字符串中的索引号
console.log(o.index);

2.2 正则表达式常用方法

2.2.1 exec方法

作用:
为指定的一段字符串执行搜索匹配操作,将符合规则的字符串提取出来

语法:
var m = r.exec(被匹配的字符串);

返回值m,是一个数组, 如果没有匹配到,就返回 null

索引 0 :表示 正则表达式匹配的字符串
input: 表示被匹配的整个字符串
  • 练习:从字符串 "abcdefgh" 中找出 "ef" 的位置
var str = "abcdefghij";
var r = new RegExp("ef");
var o = r.exec(str);
console.log(o.index);

2.2.2 全局模式

  • 循环查找案例:
从字符串 "abcdefghabcdefghabcdefgh" 中找出所有 "e" 的位置
var str = "abcdefghabcdefghabcdefgh";
var retArr = [];
var index = -1;

do {
    index = str.indexOf("e", index + 1);
    if(index !== -1) {
        retArr.push(index);
    }
} while(index !== -1);
  • 全局模式标记:g (global)
作用:只在循环多次匹配中起作用

补充 exec 的说明
在 exec 的方法中有一个规定:
同一个 正则表达式对象 如果开启了全局模式,
每调用一次 exec 方法就会继续查找下一个字符,
直到最后找不到 返回 null
var str = "abcdefghabcdefghabcdefgh";
// 使用全局匹配模式
var r = new RegExp("e", "g"); // r = /e/g;
var arr = [], m;
while((m = r.exec(str)) !== null) {
    arr.push(m.index);
}
console.log(arr);
  • 练习:从字符串 "abcabcabc" 中找出所有 "bc" 的位置

2.3 正则表达式-分组

  • 案例:解析邮箱字符串:"[email protected], [email protected], [email protected]"
利用 exec 方法提取到的结果是一个数组类型的对象,里面包含一些有用的信息。

在正则表达式中使用 圆括号 来分组, 分组后匹配到的结果可以直接获取对应的部分
var r = /([a-zA-Z0-9]+)@([a-zA-Z0-9\.]+)/g;
var m, arr = [], str = "[email protected], [email protected], [email protected]";
while((m = r.exec(str)) !== null) {
    arr.push({user: m[1], host: m[2]});
}
console.log(arr);

2.3.1 分组技巧

1 从左往右数 (
2 从 1 开始给 ( 编号
那么匹配的结果对应的 下标 就是该圆括号分的的内容
  • 练习: "(a(b(c)))" 有哪几组?
var str = "abc";
var r = /(a(b(c)))/;
var m = r.exec(str);
console.log(m);
  • 注意点:分组可以捕获也可以不被捕获
如果希望分组不捕获,在分组的圆括号里面的开始加上 ?:,即:(?:)
比如:/(?:2b)+/ 希望 "2b" 重复出现

2.4 转义字符

在 正则中有很多的元字符, 如果要匹配元字符,需要使用转义字符

使用 构造函数 创建正则表达式的语法,要注意:
var r = new RegExp("\\."); // 两个反斜线表示一个反斜线
var r = /\./;

2.5 正则表达式-替换

2.5.1 字符串的 replce 方法-替换

  • 语法
新字符串 = 字符串.replace(匹配字符串, 替换字符串);
新字符串 = 字符串.replace(正则表达式, 替换字符串);
  • 示例(基本用法)
var str = "123";
var newStr = str.replace("1", "a");
console.log(newStr); //
  • 示例(正则用法)
var str = "123";
var newStr = str.replace(/\d/, "a");
console.log(newStr); // 

// 开启全局模式
var newStr = str.replace(/\d/g, "a");
alert(newStr); //
  • 案例:去掉空格 " #div, .cls div , span " 为:"#div,.cls div,span"
var str = "   #div,    .cls div ,   span  ";
var newStr = str
    .replace(/^\s+|\s+$/g, "")
    .replace(/\s+/g, " ")
    .replace(/,\s/g, ",")
    .replace(/\s,/g, ",");
console.log("|" + newStr + "|");

2.5.2 字符串的 replce 方法-组引用

  • 案例:将日期 "1995-1-1" 修改为:"1995年1月1号"
var str = "1995-1-1";
var newStr = str.replace(/(\d+)\-(\d+)\-(\d+)/, "$1年$2月$3日");
console.log(newStr);
时间: 2024-11-03 15:42:34

正则表达式介绍的相关文章

正则表达式介绍及grep的使用

一.正则表达式介绍 1.什么是正则表达式 正则表达式就是处理字符串的方法,它是以行为单位,通过一些特殊符号的辅助,以及相应的工具来快速搜索某指定的字符串.日常中支持正则表达式的常用工具有vi.grep.awk.sed等. 2.正则表达式用途 1)可以帮组系统管理员快速处理分析日常登录信息,相关服务的运行日志等: 2)方便文档编辑 3.正则表达式分类 1)基本正则表达式 2)扩展正则表达式 二.基本正则表达式 1.字符匹配 .:匹配任意单个字符 []:匹配指定集合中的任意单个字符 [^]:匹配指定

性能测试-JMeter关联之正则表达式介绍

为什么要关联??? 在客户端与服务器通信过程中,多个请求/响应间的数据会有相互依赖的关系.比如上一个请求返回的某些响应数据在后续的请求中需要用到. 下面是一些典型的例子: 1)比如第一次访问网站获取的session id在后续的请求都会将其传给网站; 2)服务器生成token返回给用户,在后续的请求中要带上token; 3)根据条件查询某记录,在查询结果集中选择记录进行操作(比如删除) ... 但是有些通信协议是无状态的,不存在上下文相关性.多个请求/响应之间的数据不能直接进行传递; 并且每次服

正则表达式介绍与使用

正则表达式: 一.概述 正则表达式:符合一定规则的表达式. 作用:用于专门操作字符串. 特点:用于一些特定的符号来表示一些代码操作.这样就简化书写.所以学习正则表达式,就是在学习一些特殊符号的使用. 好处:可以简化对字符串的复杂操作. 弊端:符号定义越多,正则越长,阅读性越差. 具体操作功能: 1.匹配:String  matches方法.用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false. 2.切割:String split(); 3.替换:String replaceAl

正则表达式之匹配中文汉字的正则表达式介绍

这篇文章主要介绍了通过正则表达式准确匹配出字符串中存在的中文汉字,同时还有匹配双字节字符的正则,需要的朋友可以参考下 \w匹配的仅仅是中文,数字,字母,但是对于特殊需求来讲,仅匹配中文时常会用到 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 或许你也需要匹配双字节字符,中文也是双字节的字符 匹配双字节字符(包括汉字在内):[^\x00-\xff] 以下图为例:我想要的仅仅只是某一标题下的文章的来源,但是下面的正则就匹配到了多少分钟前,多少小时前这显然不是我想要的,这种情况下我就需要

正则表达式介绍及常见用法

正则表达式(Regular Expression),又称正规表示法.常规表示法,在实际的软件开发项目中经常会被使用到.它使用单个字符串来描述.匹配并获取一系列符合某个句法规则的结果. 我将从最基础的部分为大家写这个正则表达式教程. 正则表达式起源   1956年,数学家Stephen Kleene在Warren McCulloch和Walter Pitts早期神经系统工作的基础上,设计出了一个数学符号体系--regular sets(规则的集合),这个东西很快被计算机科学家用于编译器的扫描或词法

基础正则表达式介绍

正则表达式通过一些特殊符号的帮助,使用户可以轻松快捷的完成查找.删除.替换等处理程序.正则表示法基本上是一种表示法,只要工具程序支持这种表示法,该工具程序就可以用来作为正规表示法的字符串处理只用. 正则表达式特殊符号 [:alnum:]   匹配所有大写字母和数字 [:alpah:]    匹配所有字母,不区分大小写 [:blank:]    匹配所有空格和Tab键 [:cntrl:]     匹配所有控制符 [:digit:]     匹配所有数字 [:graph:]   匹配所有除空白字符以

javascript正则表达式介绍

正则表达式就是一个用来描述字符模式的对象.它被用来在文本中执行模式匹配(pattern-matching)以及”查找-替换”(search-and-replace)的任务.javascript中正则的风格类似Perl中正则的风格. 创建 var reg = new RegExp(pattern,modifiers);或var reg = /pattern/modifiers; modifiers包括 g : 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)如'Hey, Is this al

2018-06-27-Python全栈开发day22-part2-xml模块和re模块-正则表达式介绍

1.xml模块 xml模块是在json出现之前,普遍使用的文件类型, <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year updated="yes">2010</year> <gdppc>141100</gdppc> <neighbor directio

【正则表达式介绍篇】 -- 2019-08-16 11:20:46

原文: http://blog.gqylpy.com/gqy/381 "????正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为Regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符合某个模式(规则)的文本. ????许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能强大的正则表达式引擎.正则表达式这个概念最初是由Unix中工具软件(例如sed和grep)普及开的.正则表达式通常缩