在所有的语言中基本上都有一个通用的东西,那就是正则表达式了,正则表达式定义了字符串的组成规则,使得匹配环节更加灵活。同样,在前端领域中,我们知道处理数据源的终端在前端,随着交互式输入信息的格式的核查,使得正则表达式奇为重要。
在进入正文之前,先铺垫一点小知识
转义字符
在前端JavaScript代码编写中,有很多字符是带有语法规则的,如果你想打印出这样的带有语法规则的字符必须要用到转义字符。
比如说我在用"这个符号包裹着的字符串中打印"
当不用转义字符的时候
如上图,会报错,当我用转义字符的时候
这时候就不会报错。
转义字符还可以配合其他的字母形成语法规则 \r == 行结束符,\n == 换行符, \t == 制表符
多行字符串----》在我们编程规范中,格式是至关重要的,实现多行字符串这就起到了关键性作用
由上述可以明白转义字符是什么作用,现在我们开始进入正题:正则表达式
正则表达式
作用:匹配特殊字符或有特殊搭配字符的最佳选择。
创建方式:正则表达式的创建方式有两种
1. 字面量创建方式
//匹配字符串abc
var reg = /abc/;
2. 构造函数创建方式
var reg1 = new RegExp(reg)
第二种创建方式,所形成的reg1是两种不同的正则表达式,互不影响,但是如果这样
var reg2 = RegExp(reg)
此时的reg2和reg是完全相同的正则表达式,zhibu只不过是不同的引用而已。
这里先说一个正则的方法:reg.test(str),这个方法返回的是boolean类型,作用:测试片段,检测str中是否有复合正则表达式的规则,匹配返回true,否则返回false。
var reg = /abc/;
str = "abc"
console.log(reg.test(str));
//返回true
还有一个字符串的str.match(reg)方法,返回所匹配的类数组
正则表达式有很多规则,比如说:在//后面加i表示忽视大小写,在//后面加g表示全局匹配,在//后面加m表示多行匹配
上面的三种规则也可以随意搭配着使用,像上面图片的m例子就是m和g搭配着使用的
表达式
表达式:[]就是这个符号,表示范围,一个表达式就是一位的意思,表示区间
表达式里面的东西也可以有另一种写法
表达式里面也是可以写在一起的
在表达式中写^表示非得意思:[^]
在表达式或括号里面添加|表示或的意思:(|)
元字符
\w:表示所有的英文单词大小写,数字和下划线,即等价于[A-z0-9_]
\W:表示[^\w]
\d:表示数字[0-9]
\D:表示[^\d]
\s:表示查找空白字符,空白字符包括:空格符,回车符,换行符,垂直换行符,换页符。即 \s ===[\t\n\r\f\v]
\S:表示[^\s]
\b:表示单词边界
\B:表示非单词边界
.:表示[^\r\n]
\t \n \f \r :也可以用来直接匹配正则
量词
在量词中,正则表达式有着贪婪匹配的原则,能匹配多的绝不匹配少的
n+:表示{1,},匹配n字符串1--无穷个
n*:表示{0,},匹配n字符串0--无穷个。因为是从0开始,空也算匹配项
n?:表示{0,1},匹配n字符串0或者1个。
n{X}:表示匹配n字符串X个
n{X,}:表示匹配X---无穷个
^n:表示匹配必须是n字符串开头
n$:表示匹配必须是n字符串结尾
正则表达式的方法
正则表达式中还有好多方法
reg.ignoreCase:检测reg正则里面有没有i
reg.global:检测reg正则里面有没有g
reg.multiline:检测reg正则里面有没有m
reg.source:返回正则表达式匹配内容
reg.exec(str):返回所匹配的字符串并且游标向后移动
reg.lastIndex:表示匹配字符串的游标,配合reg.exec(str),index表示游标所在位置进行匹配
string方法作用及在正则中的应用
str.search(reg):返回匹配的位置,匹配不到 返回-1
str.split(reg):拆分字符串,在正则中按照正则的规则拆分字符串,返回数组
str.replace("a","b"):把字符串中的第一个a换成b,没有访问全局的权利
但是当把这个方法中的第一个参数改为正则表达式就有了匹配全局的权利
$符号可以替换字符串
str.toUpperCase() :把字符串小写转化成大写、
str.toLowerCase():把字符串大写转化成小写
正向预查:查找带有修饰词的(?=n)即 a(?=n) 查找a
非正向预查:(?!n)即 a(?!n) 查找a
非贪婪匹配:在量词后面加?
最后附上百度14年的一到题
一个字符串100000000,要求从后往前隔3个数加一个小数点。
我自己是这样写的
var str = "100.000.000.000.000";
var arr = str.split('');
var str1 = "";
for(var i = arr.length- 1; i >= 0; i --){
str1 += arr[i];
}
var reg1 = /(\d{3}\B)/g;
var str2 = str1.replace(reg1,function($,$1){
return $1 + ".";
});
var arr1 = str2.split('');
var str3 = "";
for (var i = arr1.length - 1; i >= 0; i--) {
str3 += arr1[i];
}
console.log(str3);
但是如果是正则的话,只要三行就搞定
var str = "100000000000000";
var reg = /(?=(\B)((\d{3})+$))/g;
console.log(str.replace(reg,'.'));
以上是小白总结的一些基础和应用,有什么不对的话,还希望指出来,相互学习。祝大家正则表达式学的棒。