正则表达式-javascript

前言

由于经常被正则虐,看见就不知如何处理,已断断续续学习过一些,但是一段时间没有接触就连最基本的东西也忘了,原因就是不系统,也没有实战。现在把正则表达式整理一下,方便以后的学习和实践中掌握。

正则表达式在线测试

1. 什么是正则表达式

正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹配和替换文本。

正则表达式是一个高效匹配检测的东西,对于表单检测,高亮显示搜索结果还是进行URL的地址映射,一般都需要用到它。


2. ReqExp

这一块是基于《javascript高级程序设计的第三版》整理部分。
ECMAScript是通过ReqExp类型来支持正则表达式

构造正则表达式的方法
  • 以字面量的形式来定义(method1)
  • 使用ReqExp构造函数(method2)
//pattern就是一个正则表达式。
//flags用于表达正则行为的标志。

//以字面量的形式来定义
var expression = /pattern/flags; 
//构造函数
var expression = new ReqExp("pattern","flags"); 

flags标志 作用
g 全局模式,匹配将用于所有的字符串
i 匹配不区分大小写
m 模式

元字符

在正则表达式中有一些特殊的字符符号我们是不能直接使用的,必须对其进行转义后才能使用。如“\”,因为这些字符在正则表达式中有特殊的语法含义,这类字符被称为元字符,正则表达式中的元字符有:

([{\^$|)?*+.]}都属于元字符

如果要在正则表达式中直接匹配这些元字符,需要对它们转义。

  • 由于是直接字面量,所以转义就ok了。(method1)
  • 参数都是字符串,所以涉及到双重转义。(method2)
等价关系
ReqExp的实例属性
属性名称 说明
global 表示是否设置了g标志,返回boolean值
ignoreCase 表示是否设置了i标志,返回boolean值
lastIndex 表示开始搜索下一个匹配项的字符位置,从0开始,返回的是整数。
multiline 表示是否设置了m标志,返回boolean值
source "字面量"的形式返回正则表达式。

之前的这些属性其实用于不大,就当了解吧。

ReqExp实例方法---exec( )主力

exec(应用模式的字符串 ),返回包含第一个匹配项信息的数组,但是这个数组有两个额外的属性indexinput

  • index 表示匹配项在字符串中的位置。
  • input 表示应用正则表达式的字符串。
  • 数组 第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串。

注意:使用的exec()方法的时候设置和不设置g标志是有区别的。

设置g 不设置g
每次调用exec( )都会在字符串中寻找新的匹配项 始终只是返回第一个匹配项的信息。

练练手

//eg1:
<script type="text/javascript">
    var text = "cat, bat, sat, fat";
    var pattern1 = /.at/;
    var matches = pattern1.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern1.lastIndex);

    //还有一组返回的也是一样的。
</script>
eg1的返回结果
//eg2:
    var pattern2 =  /.at/g;
    var matches = pattern2.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern2.lastIndex);

    var matches = pattern2.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern2.lastIndex);
eg2返回的结果

很明显可以看到两者的差别。

IE的javascript实现在lastIndex属性上存在偏差,即使在非全局模式下,lastIndex属性每次也会变化。


test( 字符串)

  • 模式与该参数匹配返回true
  • 不匹配就返回false

基于此,test( )一般是用在if语句中的。

    var text = "000-00-0000"
    var pattern = /\d{3}-\d{2}-\d{4}/;
    if(pattern.test(text)){
        console.log("matched");
//很明显会在chorme的控制台console中输出matched

继承的方法

方法 返回
toLocaleString( ) /toString() 返回匹配正则表达式的字面量。
valueOf( ) 返回正则表达式本身
//eg3:
    var pattern = new RegExp("\\[bc\\]at","g");
    console.log(pattern.toLocaleString());
    console.log(pattern.toString());
    console.log(pattern.valueOf());
eg3返回的结果

以上就把正则在javascript中的大致整理了下,下面就主要整理正则表达式中的(pattern)写法以及常用元字符的功能。


3. 元字符整理

元字符(常用) 说明
. 匹配除了换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d == [0-9] 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
元字符(重复) 说明
* 重复0次或更多次
+ 重复一次或更多次
重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n, m} 重复n到m次
//写一个正则可以匹配谷歌的三种网址
var gogle = "www.gogle.com";
var google = "www.google.com";
var gooogle = "www.gooogle.com";
var pattern = /w{3}\.go{1,3}gle\.com/i; ok
元字符() 说明
() 分组
markdown制作表格的竖 表示分枝
[ ] 表示选择里面的任意一个
(\d{1,3}\.){3}\d{1,3} 简单的ip匹配,但是大于255也可以匹配到;
改进:
((2[0-4])\d | 25[0-5] | [01]\d\d)\. ){3}(2[0-4])\d | 25[0-5] | [01]\d\d)
| 表示的分枝
元字符(反义) 说明
\W == [0-9A-Za-z_汉字] 匹配任意不是字母,数字,下划线,汉子的字符
\S 匹配任意不是空白符的字符
\D == [^0-9] 匹配任意的非数字的字符
\B 匹配不是单词开头或者结尾的位置
^x 匹配除了x意外的任意字符
[^aeiou] 匹配除了aeiou这几个字母意外的任意字符

到此打住,关于后向引用,零宽断言,负向零宽断言,贪婪与懒惰先不整理。


参考


实战区域

会不定期的整理实战在这个部分。

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

推荐阅读更多精彩内容