正则表达式的基础知识

本文基于工作需要,做的学习笔记
正则表达式在日常的开发使用中,还是比较常见的。 比如在一个表单提交前对某些字段进行验证,又或对某串模版代码进行字符替换、语法验证,我们都会用到。一起巩固下基础知识吧。

前提条件:
你可能需要知道什么是正则表达式,这里直接上规则了。

编码环境:

正则表达式的基础知识_第1张图片
regularEx.jpg

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"

你可能感兴趣的:(正则表达式的基础知识)