本文基于工作需要,做的学习笔记
正则表达式在日常的开发使用中,还是比较常见的。 比如在一个表单提交前对某些字段进行验证,又或对某串模版代码进行字符替换、语法验证,我们都会用到。一起巩固下基础知识吧。
前提条件:
你可能需要知道什么是正则表达式,这里直接上规则了。
编码环境:
无
1、基础知识
表达式 | 描述 |
---|---|
[……] | 匹配括号中的任何一个字符 |
[ˆ……] | 匹配不在括号中的任何一个字符(^为取反符) |
\w | 匹配任何一个字符(az、AZ和0~9) |
\W | 匹配任何一个空白字符 |
\s | 匹配任何一个非空白字符 |
\S | 与任何非单词字符匹配 |
\d | 匹配任何一个数字(0~9) |
\D | 匹配任何一个非数字(^0~9) |
[\b] | 匹配一个退格键字母 |
{n,m} | 最少匹配前面表达式n次,最大为m次(n-m次数范围) |
{n,} | 最少匹配前面表达式n次(上限不定) |
{n} | 恰恰匹配前面表达式为n次 |
? | 匹配前面表达式0或1次,即{0,1} |
+ | 至少匹配前面表达式1次,即{1,} |
* | 至少匹配前面表达式0次,即{0,} |
竖线 | 匹配配前面表达式或后面表达式(逻辑或) |
(…) | 在单元中组合项目 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
\b | 匹配字符边界 |
\B | 匹配非字符边界的某个位置 |
注:正则表达式在线判断工具网址:http://tool.oschina.net/regex/#
比如说
/^-?[0-9]*$/ 与 /^-?\d*$/ 等价,可以匹配 - 。
/^-?[1-9]\d*$/ 这个与上面不同,不可以匹配 - ,只能匹配 -3 等。
比如说
/\{%([^%>]+)?%\}/ 用来匹配{%...%}
2、方法函数
我们一般定义一个正则内容,通常就是直接字面量方式:
var reg = /^-?[1-9]\d*$/;
先看看修饰符
符通常有三种:i(表示忽略大小写), g(表示全局) , m(表示多行,遇到换行后不停止匹配,继续直到字符串结束。)
test方法
用来测试某个字符串是否与正则匹配,匹配返回true,否则返回false。
比如说
var reg=/boy(s)?\s+and\s+girl(s)?/gi;
console.log(reg.test('boy and girl')); //输出是true
exec方法
接受一个字符串,返回一个数组,数组中第0个元素是匹配的子字符串,第1个元素是子分组1的匹配结果,第2个元素是子分组2的匹配结果,以此类推。有点不明白。如果没有正则子分组,那么该数组长度就是1,就是匹配到的那个子字符串。
跟随这个数组返回的还有一个对象,它拥有2个属性,分别是index和input。前者表示当前匹配到的子字符串所处的位置,后者则表示被匹配的原是字符串。
比如说
var text = "cat, bat, sat, fat";
var pattern1 = /.at/;
var matches = pattern1.exec(text);
console.log(matches.index); //输出0
console.log(matches[0]); //输出cat
console.log(pattern1.lastIndex); //输出0
matches = pattern1.exec(text);
console.log(matches.index); //输出0
console.log(matches[0]); //输出cat
console.log(pattern1.lastIndex); //输出0
var pattern2 = /.at/g;
var matches = pattern2.exec(text);
console.log(matches.index); //输出0
console.log(matches[0]); //输出cat
console.log(pattern1.lastIndex); //输出0
matches = pattern2.exec(text);
console.log(matches.index); //输出5
console.log(matches[0]); //输出bat
console.log(pattern1.lastIndex); //输出8
compile方法
用来对正则表达式进行编译,编译后的正则表达式在使用时候效率更高,适用于一个正则多次调用的情况。对于只使用一两次的,该方法没有特别显著的效应。(少用)
比如说
var reg=/[abc]/gi;
reg.compile(reg);
3、String中的正则
比如有search、replace、split、match。
分别看下例子:
先看search
var str="hello world";
console.log(str.search(/o/g)); //输出是4
console.log(str.search(/o/)); //输出是4(结论是带不带g,没有区别)
再看replace
var str="hello world, hello test";
console.log(str.replace(/hello/g,'hi')); //输出是hi world, hi test
console.log(str.replace(/hello/,'hi')); //输出是hi world, hello test
再看split
var str="how|old*are you";
var arr=str.split(/\||\*|\s+/);
console.log(arr); //输出是Array[4] 0:"how" 1:"old" 2:"are" 3:"you"
最后看match
var str="ws1estqsa";
console.dir(str.match(/(\w)s(\w)/g)); //输出是Array[3] 0:"ws1" 1:"est" 2:"qsa"
console.dir(str.match(/(\w)s(\w)/)); //输出是Array[3] 0:"ws1" 1:"w" 2:"1" index:0 input:"ws1estqsa"