javascript之正则表达式学习笔记

正则表达式的声明

直接写在/与/之间

var reg = /...../;

使用RegExp()构造函数

var reg = new RegExp(......);

在ECMAscript 3中RegExp对象类似于引用对象,在ECMAscript 5中RegExp对象类似于值对象。

var reg= /a/;

var reg2 =/a/;

console.log(reg === reg2);//ES3标准返回true,ES5返回false

//此时在ES3中reg与reg2指向同一个对象

//在ES5中reg与reg2为两个不同的对象

转义字符

正则表达式所有字符都按直面量进行匹配。加入反斜杠(\)可进行转义。

预定义类

. [^\n\r] 除了换行和回车之外的任意字符

\d [0-9] 数字字符digit

\D [^0-9] 非数字字符

\w [a-zA-Z0-9_] 单词字符(所有的字母数字和_ ) word

\W [^a-zA-Z0-9_] 非单词字符

\s [\f\r\n\t\v] 不可见字符 space

\S [^\f\r\n\t\v] 可见字符

量词

"*" 重复零次或更多 x>=0

"+" 重复一次或更多次 x>=1

"?" 重复零次或一次  x=(0||1)

{n} n次 x=n

{n,} 重复n次或更多  x>=n

{n,m} 重复出现的次数比n多但比m少 n<=x<=m

非贪婪匹配

当以上字符后再加入一个?时将进行非贪婪匹配如*?,??,+?.{n,m}?。

进行贪婪匹配时将尽可能少的匹配内容

如/a+/匹配aaa时将回匹配全部a即匹配“aaa”,而/a+?/匹配aaa时将匹配一个“a”。

需要注意的是非贪婪匹配从第一个匹配到的值开始。

例如使用/a+?b/匹配aaab时并不会按最少的匹配ab。而是匹配aaab。这是因为匹配是从第一个a开始匹配所以也会把之前的a都匹配到。

选择

“|”分割用于选择的字符

a|b|c可匹配a或者b或者c

分组

“( )”可用于分组调用exec方法返回Array对象,0位置为匹配到的完整内容,之后位置为”( )”所分组的数据。

var str = "abcdefg";

var r = /c(d(e))/;

console.log(r.exec(str));  //["cde", "de", "e", index: 2, input: "abcdefg"]

在“(”后跟“?:”表示不获取

var str = "abcdefg";

var r = /c(?:d(e))/;

console.log(r.exec(str)); // ["cde", "e", index: 2, input: "abcdefg"]  不获取de

元字符[ ]

匹配一个出现在 [] 中的字符。

var str1 = "abcde";

var str2 = "fghig";

var r = /[bg]/;

console.log(r.exec(str1)[0]); //b

console.log(r.exec(str2)[0]); //g

使用 [] 匹配多个字符:[a-z] [A-Z]

表示否定意思:[^abc]  不匹配^之后的字符

元字符^和$

^ 表示必须以某某开头

$ 表示必须以某某结尾

var r1 = /^a/;

var r2 = /a$/;

str1 = "ab";

str2 = "ba";

console.log(r1.test(str1));  //true

console.log(r1.test(str2));  //false

console.log(r2.test(str1));  //false

console.log(r2.test(str2));  //true

当同时出现^和$时表示精确匹配

var r1 = /^asd$/;

str1 = "asd";

str2 = "a-s-d";

console.log(r1.test(str1));  //true

console.log(r1.test(str2));  //false

正则替换与组引用

replace方法第一个参数可以用正则表达式来表示需要被替换的内容。

var r1 = /^asd$/;

str1 = "LandMine LLLLLL";

str1 = str1.replace(/L/g,"l"); //g表示全局匹配

console.log(str1);  //landMine llllll

第二个参数出现$后跟数字表示正则组引用

var s = ‘1991-1-2‘;

s = s.replace( /(\d+)-(\d+)-(\d+)/g, "$1年$2月$3日" );

console.log(s); //1991年1月2日
时间: 2024-08-04 10:25:32

javascript之正则表达式学习笔记的相关文章

JavaScript中正则表达式学习笔记

一.正则表达式是什么: 处理字符串时,经常需要处理复杂规则的字符串.正则表达式就是用于描述这些规则的工具.换句话说,就是记录文本规则的代码. 二.正则表达式能做什么: 数据有效性验证(测试字符串匹配)如邮箱,电话号码等 替换文本 提取子字符串 三.特点: 灵活性.逻辑性.功能性非常强 可以迅速的用极简单的方法达到字符串的复杂控制 刚接触的人比较晦涩难懂 四.规则 1.普通字符 作用:匹配与之相同的一个字符. 字母,数字,汉字,下划线. 2.非打印字符 \f:匹配一个换页符.等价于 \x0c 和

JavaScript正则表达式-学习笔记(不定期更新)

JavaScript权威指南学习笔记,禁止转载! 8.正则表达式 在常见的字符串检索或替换中,我们需要提供一种模式表示检索或替换的规则. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 使用: /\d\d\d/.test("123");  //true new RegExp("Bosn").test("Hi,Bosn");  //true 正则基础: . 任何字符(除换行符以外) /-/.test('[email prote

JavaScript正则表达式学习笔记之一 - 理论基础

自从年前得空写了两篇文章之后就开始忙了,这一忙就是2个月??.当时信誓旦旦说的定期写篇博客的计划也就泡汤了??,不过好在最近有空,顺便总结一下这两个月遇到的几个问题.第一个问题就是项目中用到了一些正则才发现之前被自己忽略的正则是时候补一补了.恰逢今天周六??,就把自己学习JavaScript正则表达式的笔记整理成文,写了这篇关于正则表达式理论基础的文章,希望本文能对有需要的同学提供帮助.号外:本文相对基础,大神请忽略??. 一. 基本概念 正则表达式是用于匹配字符串中字符组合的模式. 一种几乎可

正则表达式学习笔记---揭开正则表达式的神秘面纱

正则表达式学习笔记 如果我们问那些UNIX系统的爱好者他们最喜欢什么,答案除了稳定的系统和可以远程启动之外,十有八九的人会提到正则表达式:如果我们再问他们最头痛的是什么,可能除了复杂的进程控制和安装过程之外,还会是正则表达式.那么正则表达式到底是什么?如何才能真正的掌握正则表达式并正确的加以灵活运用?本文将就此展开介绍,希望能够对那些渴望了解和掌握正则表达式的读者有所助益. 入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到

JavaScript高级程序设计学习笔记--基本概念

1.语句 ECMAScript中的语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾,如下例所示: var sum=a+b //即使没有分号也是有效的语句--推荐 var diff=a-b; //有效的语句--推荐 虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它.两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器就不必再花时间 推测应该在哪里插入分号了. 2.变量 var message="hi"; 像这样初始化变量

JavaScript高级程序设计学习笔记--错误处理与调试

try-catch语句 只要代码中包含finally子句,则无论try或catch语句块中包含什么代码--甚至return语句,都不会阻止finally子句的执行,来看下面这个函数: function testFinally(){ try{ return 2; }catch(error){ return 1; }finally{ return 0; } } 调用这个函数会返回0(PS:但我实际执行的时候会先返回0,再返回2) 抛出错误 与try-catch语句相配的还有一个throw操作符,用于

ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录

放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 诸君,我喜欢嫩的--呸呸呸 诸君,我喜欢3D咋了?新事物会替代旧事物不是~ ArcGIS API for JavaScript 4.2概述 AJS 4.2,即ArcGIS API for JavaScript 4.2,是美国ESRI公司针对WebGIS市场推出的.利用JavaScript和Dojo开发的一款产品,它在2016年12月发布.而AJS 4.0 beta则在一年前就发布了. 关于AJS3和AJS4选择的问题,

JavaScript权威指南学习笔记之一

1.关于分号 javascript里面不强制使用分号来表示一行语句的结束,但是最好能够在写js之前,特别是在原有的js上面新增时,最好前置一个分号.避免这种情况发生:  2.JavaScript类型转换 3.关于=== ①如果类型不同则不等 ②null===null或undefined===undefined ③true===true或false===false ④NaN不等 ⑤0===0 0===-0 ⑥如果是同一个object,array,function则相等 4.关于== ①如果已经==

JavaScript高级程序设计学习笔记--面向对象程序设计

工厂模式 虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为解决这个问题,人们开始使用 工厂模式的一种变体. function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var