正则表达式的基础知识

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

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

编码环境:

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"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容