搜索
您的当前位置:首页正文

火星文-正则表达式入门篇(JavaScript)

来源:二三娱乐

正则表达式的定义

正则表达式又称为规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。是一种强大的字符串匹配工具。

正则表达式目的

  • 判断字符串是否匹配正则表达式的规则
  • 通过正则表达式,从字符串中获取我们想要的特定部分

平时我们所看到的判断一串一段字符串是否是电话号、邮箱、网址等,都使用了正则表达式判定。

下面开始讲解正则表达式规则以及JavaScript中的用法:

定义正则表达式

1. 通过RegExp对象来表示

var re = new RegExp("参数一","参数二");
参数一:正则表达式主体部分
参数二:正则表达式的修饰符,只能传入g,i,m或者他们的组合
例:var re = new RegExp("^\\s+|\\s+$","g");
关于例子中火星文是什么意思,往下读就知道啦😁
var re = /参数一/参数二;
注:参数一参数二所填内容和第一种第一种定义方式相同
例:var re = /^\s+|\s+$/g;

正则表达式常用到的方法

1.test()

  • RegExp对象的方法,返回值为布尔值。
  • 对字符串进行检测,如果包含正则表达式一个匹配结果,则返回true
var str = "abcedf";
//检测字符串str中是否存在"f",且区分大小写
var re = /f/;
var result = re.test(str);
结果:true
var str = "abcedF";
//i:正则表达式修饰符,表示不区分大小写匹配
var re = /f/i;
var result = re.test(str);

2.match()
字符串的方法,参数可为正则表达式,返回值为匹配结果的数组

var str = "abcedFbzhffhuiFFFhhf";
//g:正则表达式修饰符,表示全局匹配
//简言之,即找到所有的匹配,而不是在找到第一个之后就停止
var re = /f/gi;
//match(),字符串的方法,参数为正则表达式,返回值为匹配结果的数组
var result = str.match(re2);
result的值:[F,f,f,F,F,F,f];
注:可以将正则表达式中的修饰符中的"g"去掉,运行看下结果

3.replace(参数一,参数二)

  • 字符串的方法,用于在字符串中用一些字符替换另一些字符
  • 参数一:正则表达式
  • 参数二:类型为字符串,代表要替换的文本
var str = "abcadeAfg";
//匹配字符串中的a,不区分大小写,且全局匹配
var re = /a/ig;
var result = str.replace(re,"*")
result的值:*bc*de*fg

正则表达式规则:

1.修饰符

  • i:执行不区分大小写的匹配
  • g: 全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
  • m:多行匹配模式

2.字符文本匹配

//匹配字符串中所有的f,不区分大小写
var re = /f/gi;

3."|" 选择,匹配是该符号左右的子表达式

var str = "金三胖 1b21a2 abc ee 金胖子";
//匹配字符串中所有的金、胖、2
var re = /金|胖|2/g;
var result = str.replace(re,"*");
result的值:*三* 1b*1a* abc ee **子

4.字符类

  • [ ... ]匹配方括号内的任意字符
  • [ ^... ] 不匹配方括号内的任意字符
var re1 = /[1,3]/g;    //匹配字符串中1或者3或者逗号
var re2 = /[123 456]/g;//匹配字符串中1或2或3或空格或4或5或6
var re3 = /[0-9]/g;    //匹配字符串中0到9
var re4 = /[a-z]/gi;   //匹配字符串中的a-z,忽略大小写
var re5 = /[A-Z]/g;    //匹配字符串中的A-Z
var re6 = /[^a]/g;     //匹配除a以为的所有字符
var re7 = /[^0-9a-z ]/g;//匹配除0到9 a到z 和空格以外的字符
例:
var str = "金三胖 1b21a2 abc ee 金胖子";
var re = /1[abc]2/g;//等价于var re = /1a2|1b2|1c2/g;
var result = str.match(re);
result的值:["1b2","1a2"];

5.转移字符类

  • . 除换行符和其他Unicode行终止符之外的任意字符
  • \d 任何数字,等价与[0-9]
  • \D 任何不是数字的字符,等价与[^0-9]
  • \w 任何数字字母下划线,等价于[a-zA-Z0-9_]
  • \W 任何不是任何数字字母下划线组成的字符串,等价于[^a-zA-Z0-9_]
  • \s 任何Unicode空白符 ,比如空格
  • \S 任何非Unicode空白符

6.量词

  • {n,m} 匹配前一项至少n次,但不能超过m次
  • {n, } 匹配前一项至少n次
  • {n} 匹配正好n次
  • 匹配前一项0次或者1次,也就是说前一项是可选的,等价于{0,1}
  • + 匹配前一项1次或多次,等价于{1, }
  • * 匹配前一项0次或多次,等价于{0, };
var str = "12345 rt3yui789 y5uuu 0987654 h5h3hh 2222222";
//匹配数字 数字的个数在2到5之间
var re = /\d{2,5}/;
var result = str.match(re);
result的值:["12345", "789", "09876", "54", "22222", "22"]
var str = "12345 rt3yui789 y5uuu 0987654 h5h3hh 2222222";
//匹配数字 至少一个
var re = /\d+/;
var result = str.match(re);
result的值:["12345", "3", "789", "5", "0987654", "5", "3", "2222222"]
//匹配数字2 个数为两个的连续子字符串
var re1 = /2{2}/;
//匹配前后带有一个或者多个空格的字符串"java"
var re2 = /\s+java\s+/;
注:在使用"*"和"?"时要注意,由于这些字符可能匹配0个字符,因此它们人允许什么都不匹配。
例如,正则表达式/a*/实际上与字符串"bbbb"是匹配的,因为这个字符串含有0个a

7.字符串边界

  • ^ 匹配字符串的开头,多行检索中,匹配一行的开头
  • $ 匹配字符串的结尾,多行检索中,匹配一行的结尾
//匹配以good开头的字符串
var re1 = /^good/;
//匹配以good结束的字符串
var re2 = /good$/;
var str = "       ggghgh ggggg  uuu  ";
//匹配字符串开头或结束有至少一个空格的字符串
 var re = /^\s+|\s+$/g;
//将字符串中符合正则表达式的字符串,替换成空字符串
//简言之:去掉首尾字符串
var result = str.replace(re,"");
result的值:ggghgh ggggg  uuu

8.匹配文字

[\u4e00-\u9fa5] 文字字符集
例:
var str = "ahjaajan 蓝胖子 najhajajan";
//匹配字符串中是文字的字符串
var re =  /[\u4e00-\u9fa5]+/g;
var result = str.match(re);
result的值:["蓝胖子"]

这篇正则表达式的基础先讲到这里,其实很多语言的正则规则都是一样的,所不同的就是在不同编程语言里,检测、替换、查找所用到的函数或者方法不同。

欢迎大家留言交流!😁

Top