正则表达式

正则表达式

  • 了解正则表达式基本语法
  • 能够使用JavaScript的正则对象

正则表达式简介

什么是正则表达式

正则表达式:用于匹配规律规则的表达式,正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在在编程语言中有广泛的应用。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式的作用

  1. 给定的字符串是否符合正则表达式的过滤逻辑(匹配)
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
  3. 强大的字符串替换能力(替换)

正则表达式的特点

  1. 灵活性、逻辑性和功能性非常的强
  2. 可以迅速地用极简单的方式达到字符串的复杂控制
  3. 对于刚接触的人来说,比较晦涩难懂

正则表达式的组成

  • 普通字符
  • 特殊字符(元字符):正则表达式中有特殊意义的字符

正则表达式

var reg=/字符/;//两个//,如果中间没有是注释,中间随便写个字符就是正则表达式字面量形式。

正则对象.test(字符串)如果字符串符合正则公式,就返回true,否则,返回false
var str='1234'
var reg=/\d/;
console.log(reg.test(str));//返回true

元字符

常用元字符串

元字符 说明
\d 匹配数字
\D 匹配任意非数字的字符
\w 匹配字母或数字或下划线
\W 匹配任意不是字母,数字,下划线
\s 匹配任意的空白符
\S 匹配任意不是空白符的字符
. 匹配除换行符以外的任意单个字符
^ 表示匹配行首的文本(以谁开始)
$ 表示匹配行尾的文本(以谁结束)
var reg=/^a/; 只要字符串以a开头就符合条件
var reg=/a$/; 只要字符串以a结尾就符合条件
var reg=/^abc$/; 只能匹配abc字符串
var reg=/^\d$/; 只能匹配一个数字
var reg=/^\d{3,}$/; 只能匹配3个或3个以上数字不能有其他字符
var reg=/\d{3,}/; 只要包含3个或3个以上数字就行

限定符

限定符 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
重复n次
重复n次或更多次
重复n到m次

其它

[] 字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思
var reg=/^[abcd]$/;只能有一个字符,而这个字符只可以是中括号的任何一个

[^]  匹配除中括号以内的内容
var reg=/^[^abcd]$/;只能有一个字符,而这个字符不能有中括号的任何一个
var str='a'
console.log(reg.test(str));//false;

\ 转义符

| 或者,选择两者中的一个。注意|将左右两边分为两部分,而不管左右两边有多长多乱
var reg=/^a|c$/;  //以a开头或以c结尾

() 从两个直接量中选择一个,分组
   var reg=/^gr(a|e)y$/;  //匹配gray和grey

[\u4e00-\u9fa5]  匹配汉字
var reg=/^[a-z]$/; //匹配a-z字符

案例

验证手机号:

^\d{11}$

验证邮编:

^\d{6}$

验证邮箱 xxx@itcast.cn:

^\w+@\w+\.\w+$

JavaScript 中使用正则表达式

创建正则对象

方式1:

var reg = new Regex('\\d', 'i');
var reg = new Regex('\\d', 'gi');

方式2:

var reg = /\d/i;
var reg = /\d/gi;

参数

标志 说明
i 忽略大小写
g 全局匹配
gi 全局匹配+忽略大小写

正则匹配

// 匹配日期
var dateStr = '2015-10-10';
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/
console.log(reg.test(dateStr));

正则提取

// 1. 提取工资
var str = "张三:1000,李四:5000,王五:8000。";
var array = str.match(/\d+/g);
console.log(array);

// 2. 提取email地址
var str = "123123@xx.com,fangfang@valuedopinions.cn 286669312@qq.com 2、emailenglish@emailenglish.englishtown.com 286669312@qq.com...";
var array = str.match(/\w+@\w+\.\w+(\.\w+)?/g);
console.log(array);

// 3. 分组提取  
// 3. 提取日期中的年部分  2015-5-10
var dateStr = '2016-1-5';
// 正则表达式中的()作为分组来使用,获取分组匹配到的结果用Regex.$1 $2 $3....来获取
var reg = /(\d{4})-\d{1,2}-\d{1,2}/;
if (reg.test(dateStr)) {
  console.log(RegExp.$1);
}


正则替换

// 1. 替换所有空白
var str = "   123AD  asadf   asadfasf  adf ";
str = str.replace(/\s/g,"xx");
console.log(str);

// 2. 替换所有,|,
var str = "abc,efg,123,abc,123,a";
str = str.replace(/,|,/g, ".");
console.log(str);
posted @ 2020-02-01 15:51  handsomehe  阅读(205)  评论(0编辑  收藏  举报