node.js学习笔记之正则表达式

每种编程语言里都有正则表达式,而且内容基本上都是一样的,今天就来说说我对正则表达式的理解。

我觉得正则表达式实际上就是一种规则,一种针对字符串的规则,我们可以通过正则表达式来获取我们想要的同类型字符串或者检验某一字符串是否符合我们的要求。

正则表达式可以参与计算的符号有:

(),小括号,或叫圆括号,是一个分组,也是个集合。他的作用是一个匹配一串字符。比如:

/(abc)/;   该句的作用是匹配源字符串中是否有"abc"这样的一串字符;

[],中括号,或叫方括号,是一个集合,他的作用是匹配集合中的其中一个字符。比如:

/[abc]/;  该句的作用是匹配源字符串中是否有"a"或者"b"或者"c"中的其中一个。

{},大括号,或叫花括号,是一个数量范围,他的作用是匹配某串字符是否有N个,不能直接使用,需要和其他能代表字符的表达式配合使用。他有三种用法:

{1} 匹配一次,{1,} 匹配最少一次,最多不限,{1,5} 匹配最少一次,最多5次。比如:

/[abc]{2}/ 这句的意思是abc其中的一个是否连续出现2次,就是匹配源字符串中是否有aa 或bb 或cc;

/[abc]{2,}/ 这句的意思是abc其中的一个是否最少连续出现2次。

/[abc]{2,5}/ 这句的意思是abc其中的一个是否最少连续出现2次,最多出现5次。

其实这里有个坑:

let a = /[abc]{2,5}/;
let b = ‘aaaaaa’;
console.log(a.test(b));//结果为true

为什么6个a也能匹配成功?我的理解是:匹配是检索源字符串中的其中一串是否符合正则,意思就是6个a中肯定有连续的2-5个a,所以能匹配成功。这个坑先记下,讲到后面的符号时再来破他。

\,反斜杠,是转义符,意思是反斜杠后面将要用到的字符不是表面上看起来那样的意思,这句话有点绕,看例子就能明白了:

/\(/  小括号在正则中的意思是分组,但用反斜杠标注之后,那他的意思就不是表面上分组的意思了,那是什么意思?意思是他就是个左小括号。再来个例子就能更明白点:

/\d/; d在正则中表面上是一个字符,但用反斜杠标注之后,他就不是个字符了,就代表所有的数字。

^ ,这个符号暂时没有中文名字,英文名字叫caret,他有两个作用,在表达式的开头写上他,代表字符串的开头,写到集合中,就代表非,就是不能有集合中的字符。还是例子能说明事儿:

/^a/; 这句的意思是要匹配的字符串的第一个字符必须是a;

let a=/^a/;
let b = "abc";
let c = "bacd";
console.log(a.test(b));//true; b字符串开头第一个字符是a,所以能匹配成功。
console.log(a.test(c));//false; c字符串开头第一个字符不是a,所以匹配失败。

$, 美元符号,作用是匹配字符串的结尾,和 ^ 的效果一样,位置相反,直接看例子:

let a=/a$/;
let b = "bca";
let c = "cad";
console.log(a.test(b));//true; b字符串最后一个字符是a,所以能匹配成功。
console.log(a.test(c));//false; c字符串最后一个字符不是a,所以匹配失败。

| 竖线, 或 的意思,和代码里常用的 || 用法一模一样,就不再多说了。

? ,问号,量词,和{}用法一样,意思是匹配0次到1次。效果等同{0,1};

* ,星号,量词,和{}用法一样,意思是匹配0次到N次。效果等同{0,};

+ , 加号,量词,和{}用法一样,意思是匹配1次到N次。效果等同{1,};

. , 点号,不是量词,意思是可以匹配任意一个字符。

另外还有一些转义用法:

\d 代表任意一个数字 效果等同[0-9];

\D 代表任意一个不是数字的字符,效果等同[^0-9];

\w 代表任意一个字母、数字、_ (下划线)、汉字。 功能很强大。

\W 代表任意一个不是字母、数字、_ (下划线)、汉字的字符。

等等,不过那些一般情况下用不到,这里就不详细说了。

下面要说一下正则表达式的模式:

g,全局模式,意思是要把源字符串从头到尾匹配一遍,不论中间是否匹配成功,如果不加 g模式,那么匹配成功一次之后就不再向后匹配了。

i,不区分大小写模式,这个很明了,不用细说。

m,多行模式

下面找几个例子来拆解一下应该能更容易明白:

网上找的一个邮箱的正则表达式: /^[\w]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/g;

来我们解读一遍,

^    [\w]   +     ( \.  [\w-]    +     )*     @ [\w-]      +

开头[任一字XX]最少一次 (点号 [任一字XX或-]最少一次)不限次  @[任一字XX或-]最少一次

(\.   [\w-]      +    ) +      $

(点号 [任一字XX或-]最少一次)最少一次  结尾

这样能看懂么?看不懂?那就按他的规则写一个字符串看看是不是邮箱的格式吧

^    [\w]   +     ( \.  [\w-]    +     )*     @ [\w-]      +

开头[任一字XX]最少一次 (点号 [任一字XX或-]最少一次)不限次  @[任一字XX或-]最少一次

这是拼接的: a3_         .b23g                    @ abc

(\.   [\w-]      +    ) +      $

(点号 [任一字XX或-]最少一次)最少一次  结尾

.     ab4         .ab4.ab4

好了,连起来看就是:a3_.b23g@abc.ab4.ab4.ab4  哇,真是邮箱的格式,不过里面用了很多\w,我还还真没见过用汉字的邮箱 和汉字的域名后缀,所以我们可以来改造一下,让这个更符合我们现在的常见情况:

/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/g;

恩,因为\w是可以代表数字、字母、_和汉字,我们不要汉字 ,那就写成了 [a-zA-Z0-9_]

好的,再拼一下,那就是[email protected] ; 跟我们常见的邮箱一样了吧。个人感觉这一整篇文章也就最后这段的拆解法写正则能对某些同学会有帮助了。最重要还是要多练习。

时间: 2024-09-30 00:15:14

node.js学习笔记之正则表达式的相关文章

Node.js学习笔记(3) - 简单的curd

这个算是不算完结的完结吧,前段时间也是看了好久的Node相关的东西,总想着去整理一下,可是当时也没有时间: 现在看来在整理的话,就有些混乱,自己也懒了,就没在整理,只是简单的记录一下 一.demo的简单介绍 这次demo,只涉及到简单的curd操作,用到的数据库是mongo,所以要安装mongo数据库,数据库连接驱动是mongoose: 当然关于mongo的驱动有很多,比如mongous mongoskin等:(详见http://cnodejs.org/topic/4f4ca8e0940ce2e

系列文章--Node.js学习笔记系列

Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql) Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识 Nodejs学习笔记(七)--- Node.js + Exp

Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)

笔记来自<Node入门>@2011 Manuel Kiessling JavaScript与Node.js Node.js事实上既是一个运行时环境,同时又是一个库. 使用Node.js时,我们不仅仅在实现一个应用,同时还实现了整个HTTP服务器. 一个基础的HTTP服务器 server.js:一个可以工作的HTTP服务器 var http = require("http"); http.createServer(function(request, response) { r

Node.js学习笔记【3】NodeJS基础、代码的组织和部署、文件操作、网络操作、进程管理、异步编程

一.表 学生表 CREATE TABLE `t_student` ( `stuNum` int(11) NOT NULL auto_increment, `stuName` varchar(20) default NULL, `birthday` date default NULL, PRIMARY KEY  (`stuNum`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 学生分数表 CREATE TABLE `t_stu_score` ( `id` int(11

node.js学习笔记目录

1.node.js学习笔记(1)--Node.js简介及环境安装 2.node.js学习笔记(2)--使用Express快速创建应用 3.node.js学习笔记(3)--Express创建的项目分析 4.node.js学习笔记(4)--使用Express完成简单的登陆 5.node.js学习笔记(5)--MongoDB下载及安装 6.node.js学习笔记(6)--MongoDB简单入门 7.node.js学习笔记(7)--Node.js与MongoDB简单交互 8.node.js学习笔记(8)

node.js 学习笔记

学习网站:http://www.nodejs.net/a/20141016/232139.html: 笔记:介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网

node.js 学习笔记1-mocha

1.mocha是什么 mocha是一款流行的额JavaScript测试框架. 2.mocha的基本用法 1.使用npm 安装mocha包,我并没有选择全局安装.只是在mocha的文件夹里的Package.json添加mocha的依赖. 如下图 { "name": "mocha-test", "version": "0.0.1", "dependencies": { "koa": &quo

node.js学习笔记(一)——创建第一个应用

巧妇难为无米之炊.要学习node.js,当然必须先有node.js环境(可以去官网 http://nodejs.cn/ 下载安装),如果还是不懂怎么配置开发环境,度娘会告诉你一切. 安装完成环境之后,先别急着开发.在开发之前,为了更清晰的掌握接下来我们的第一个应用的代码逻辑,我们还需要了解一下node.js 应用的基本组成成分,如下: 1. 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块. 2. 创建服务器:服务器可以监听客户端的请求,类似于 Apa

node.js学习笔记之写文件

node.js之写文件 //---------------optfile.js------------------var  fs=  require('fs');module.exports={    writefile:function(path,data){    //异步方式        fs.writeFile(path,  data,  function  (err)  {            if  (err)  {                throw  err;