文档章节

JS中正则表达式

王潭不是王雨潭
 王潭不是王雨潭
发布于 2017/09/06 19:13
字数 1080
阅读 15
收藏 0
点赞 0
评论 0

正则表达式的定义

js中的正则表达式使用RegExp对象表示,两种创建正则表达式对象的方法

直接量定义

将表达式包含在斜杠之间

var pattern = /js/;

构造函数定义:

使用RegExp()构造函数定义

var pattern = new RegExp('js');

正则表达式中的字符

特殊字符需要转译:使用反斜杠\进行转移

字符类

下为几种常见的字符类

  • [...]在方括号的任意字符
  • [^...]不在方括号内的任意字符
  • . 换行符及其他行终止符之外的任意字符

重复

  • {n,m} 匹配前一项至少n次,最多m次
  • {n,} 匹配前一项n次或者多次
  • {n} 匹配前一项n次
  • ? 匹配前一项0或1次,既前一项可选,既{0,1}
  • + 匹配前一次一次或多次
  • * 匹配前一次0或多次 eg:/[^(]*/匹配非左括号0或多个

非贪婪匹配

尽可能少的匹配,在待匹配的字符后面加?

var p1 = /[a]+/;
var p2 = /[a]+?/;
var str = 'aaaaaaasss';
str.match(p1);  /*["aaaaaaa", index: 0, input: "aaaaaaasss"]*/
str.match(p2); /*["a", index: 0, input: "aaaaaaasss"] 尽可能少的匹配*/

分组和引用

圆括号的作用

  • 把单独的组合合成子表达式
var p = /java(script)?/ 
//表示可以有script也可以没有,script为一个子表达式
  • 在完整的模式中定义子模式
var p1 = /[a-z]+\d+/;
var p2 = /[a-z]+(\d+)/;
var str = 'abc123456aaa';
str.match(p1); 
//["abc123456", index: 0, input: "abc123456aaa"] 可以匹配出字符串abc123456
str.match(p2);
/* ["abc123456", "123456", index: 0, input: "abc123456aaa"] 可以把子模式(\d+)单独匹配出来*/
  • 允许在同一正则表达式后面引用前面的子表达式
var p1 = /['"][^'"]*['"]/; //匹配引号之中的文本,不能保证左右匹配
var p2 = /(['"])[^'"]*\1/; //用\n表示第n个圆括号中的子表达式,计数以右边括号的位置为准,\1表示模式匹配的文本的引用,而不是对子表达式的引用,可以保证引号匹配。
var a = '\'aaaa\'123';
var b = '\'aaaa\"123';
a.match(p1); ["'aaaa'", index: 0, input: "'aaaa'123"]//正常匹配
a.match(p2); ["'aaaa'", "\'", index: 0, input: "'aaaa'123"] //可以匹配出子表达式['"]中对应的字符 '  (\为自己加的转译符)
b.match(p1); ["'aaaa"", index: 0, input: "'aaaa"123"]//["'aaaa"", index: 0, input: "'aaaa"123"] 正常匹配
b.match(p2);//null ,因为\1表示第一个组匹配到的文本的引用,既 ' 而不是 "

***不能在字符类中使用这种引用,例如

/['"][^\1]*\1/

这种写法是非法的 ***如果只想分组,但不想分组被编号,可以使用(?: )来进行分组,例如:

var p = /([Jj]ava(?:script)?)\sis\s(fun\w*)/ 
//(?: )中的字符可以被作为分组匹配,但不会进行编号,则\2表示与(fun\w*)匹配的文本

指定位置匹配

  • \b表示单词的边界;\B表示非单词的边界
  • ^表示字符串的开始;$表示字符串的结尾
  • 先行断言,定义在(?= )之间
var p = /[Jj]ava(script)?(?=\:)/;
var str1 = 'Javascript:aaa';
var str2 = 'Javascript aaa';
str1.match(p); //["Javascript", "script", index: 0, input: "Javascript:aaa"],匹配成功,但是匹配结果中不包含:
str2.match(p); //null,不能匹配,因为先行断言不满足
  • 负向先行断言,定义在(?! )之间,表示字符不匹配XXX
var p = /[Jj]ava(?!script)[A-Z]\w*/; 
//表示java后面可以跟大写字母和任意多的ASCII单词,但是不能包含script
var str1 = 'javaBean';
var str2 = 'javascript';
var str3 = 'javascripter';
str1.match(p);/*["javaBean", index: 0, input: "javaBean"] 匹配成功*/
str2.match(p); //null
str3.match(p); //null

修饰符

  • i 不区分大小写
  • g 全局匹配
  • m 多行数据中执行匹配

字符串中的正则方法

  • search() 返回第一个与之匹配的字串的位置,如果找不到匹配的字串则返回-1,不支持全局检索,会忽略修饰符g
  • replace() 用于检索与替换,第一个参数为正则表达式,第二个参数为要替换的字符串。 replace() 可用$n表示第n个子表达式,进行匹配替换。
var p = /"([^"]*)"/g;
text = '1,"2,3","5",4';
text.replace(p, 'A$1A');//1,A2,3A,A5A,4,匹配出所有p相匹配的部分,$1代表([^"]*)中匹配的结果,并将所有"替换为A

© 著作权归作者所有

共有 人打赏支持
王潭不是王雨潭
粉丝 4
博文 17
码字总数 14646
作品 0
杭州
JavaScript学习记录day9-标准对象

JavaScript学习记录day9-标准对象 [TOC] 在JavaScript的世界里,一切都是对象。 但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用操作符获取对象的类型,它总是返回一个字符...

ygqygq2 ⋅ 06/11 ⋅ 0

学习Javascript的8张思维导图

分别归类为:  javascript变量  javascript运算符  javascript数组  javascript流程语句  javascript字符串函数  javascript函数基础  javascript基础DOM操作  javascript正则表达式...

thinkyoung ⋅ 2014/09/23 ⋅ 0

JavaWeb01-HTML篇笔记(七)

.1 案例三:完成对注册页面的数据的简单校验.1.1.1 需求: 对注册页面的数据进行非空的简单校验!!!如果有某个值没有输入,点击提交,弹出一个对话框进行提示!! 1.1.2 分析:1.1.2.1 技术分...

我是小谷粒 ⋅ 04/28 ⋅ 0

JavaScript零基础入门——(七)当字符串遇上正则表达式

JavaScript零基础入门——(七)当字符串遇上正则表达式 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们学习了几种常用的字符串处理的方法,但上节课我们也说了,原生的字符串处理...

JandenMa ⋅ 06/16 ⋅ 0

如何让webpack打包的速度提升50%?

随着前端应用包含的模块数量日益增长,代码打包的耗时也越来越长。公司很多项目打包耗时超过了10秒,对于一般人来说超过10秒的等待是比较难受的,虽然后续增量编辑的速度很快。于是我想结合实...

SBDavid ⋅ 05/10 ⋅ 0

爬虫获取 js 动态数据 (万方数据库文献下载)

今天讲讲用爬虫下载万方数据库文献。 这是我们要爬取的文献链接: http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=zgtx201803009 右键那个下载按钮 -> 检查,我们可以看见,...

anye137 ⋅ 06/07 ⋅ 0

前端要以正确的姿势学习编译原理(上篇)

前端要以正确的姿势学习编译原理(上篇) 发布于 02:05 文章被以下专栏收录

brambles ⋅ 05/22 ⋅ 0

爬虫获取 js 动态数据 (1)

爬虫遇到 js 动态数据时,主要解决方法有两种: 使用一些库,例如 Selenium,来模拟浏览器环境抓取数据。但这样做对内存和 CPU 的消耗都比较大,爬虫效率低,应尽量避免。 手动分析 js 请求,...

anye137 ⋅ 06/05 ⋅ 0

五月前端知识集锦(每月不可错过的文章集锦)

目前自己组建的一个团队正在写一份面试图谱,将会在七月中旬开源。内容十分丰富,第一版会开源前端方面知识和程序员必备知识,后期会逐步写入后端方面知识。因为工程所涉及内容太多(目前已经...

夕阳 ⋅ 05/28 ⋅ 0

JavaScript 编程精解 中文第三版 十二、项目:编程语言

十二、项目:编程语言 原文:Project: A Programming Language 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《JavaScript 编程精解(第 2 版)》 确定编程语言中的表达式...

ApacheCN_飞龙 ⋅ 05/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

线程池

一、线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。 二、线程池的体系结构: java.util.concurrent.Executor : 负责线程的使用...

stars永恒 ⋅ 20分钟前 ⋅ 0

你值5K还是15K?实战案例,测测你的分析功力

本文源自陈老师遇到的真实案例。 老板说:“我们今年准备参加展会,做一年。以前我没参加过,没关系,这里有一份展会数据,你回去分析下哪些有价值,后边组织的时候有个指导”。现在你收到任...

加米谷大数据 ⋅ 22分钟前 ⋅ 0

中文转英文功能

package com.sysware.task.util;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;import net.sourceforge.pinyin4j.for......

AK灬 ⋅ 23分钟前 ⋅ 0

JNI Java层类关联C/C++层的类

Android开发时,因为要实现某某功能,需要集成算法公司的算法库(so库),这就需要自己编写JNI。 通常这些库提供的接口可以概况成1、初始化 2、算法处理 3、释放 4、打印版本号 初始化后会返...

国仔饼 ⋅ 26分钟前 ⋅ 0

maven下载jar包改为阿里云的maven库

一:修改maven安装路径中conf文件夹下的setting.xml文件 <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/......

夜醒者 ⋅ 26分钟前 ⋅ 0

电商用户行为分析大数据平台相关系列10-基础数据结构分析

电商用户行为分析大数据平台相关系列1-环境介绍 电商用户行为分析大数据平台相关系列2-HADOOP环境搭建 电商用户行为分析大数据平台相关系列3-HIVE安装 电商用户行为分析大数据平台相关系列4...

xiaomin0322 ⋅ 27分钟前 ⋅ 0

使用readLine()方法遇到的坑

下午玩 TCP/IP 的 Socket 通信时,使用 BufferedReader 的 readLine() 遇到了一个坑,现在终于解决了,特此记录下来。 程序很简单,客户段从控制台读取用户输入,然后发送至服务器端,主要代...

孟飞阳 ⋅ 27分钟前 ⋅ 0

基于Hadoop集群的Hive安装配置(Derby数据库)

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据,提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行(具体的Hive架构大家自行搜索)。接下来主要讲下Hadoop集群下...

海岸线的曙光 ⋅ 28分钟前 ⋅ 0

CoreOS裸机iso安装和相关配置

裸机通过iso安装CoreOS,个人趟了很多坑,以下就是完整的从零开始部署和配置的过程,希望对大家有用。 一、安装CoreOS到硬盘 1. 准备Live iso镜像,制作好usb启动盘 Live iso下载地址 2. 搭建...

ykbj ⋅ 33分钟前 ⋅ 0

jquery控制表格锁列(转)

表格已经完成后新加的需求,要实现锁表格的第一列。很多带这种效果的都是js封装的框架或者具体某种框架的组件,不适用解决当前问题。作为后端开发又实在不熟样式,搜到了一个可以用的,虽然样...

刘昌鑫 ⋅ 35分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部