资讯专栏INFORMATION COLUMN

正则表达式

Noodles / 3325人阅读

摘要:一定义正则表达式,使用单个字符串来描述匹配一系列符合某个句法规则的字符串。没有找到则返回分割标识符参数,可以是多个字符或一个正则表达式限制返回元素的个数五参考资料高级程序设计正则表达式课程,

一. 定义

正则表达式(Regular Expression),使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

二. 基本语法 元字符

正则表达式中有特殊含义的非字母字符

字符类

[]可以构建一个类,比如[abc],匹配含有abc
字符类取反
[^]表示匹配一个未列出的字符, 而不是匹配列出的字符

var reg=/[^ab]/g;
var string="acdadbb";
string.replace(reg,"A"); //结果为"aAAaAbb"
范围类

[],匹配一个范围,在其类内部是可以连写的,例如

[a-zA-Z] //匹配26个字母的大小写
预定义类

.匹配除回车符和换行符之外的所有字符

d匹配数字字符

D匹配非数字字符

s匹配空白符

S匹配非空白符

w匹配单词字符(字母、数字下划线)

W匹配非单词字符
注意大小写的区分

边界

^开始

$结束

单词边界

B非单词边界

量词

匹配之前紧邻的元素,这个元素可以不出现,且匹配成功(最多出现一次)

+ 表示之前紧邻的元素出现一次或者多次,无法进行一次匹配时,会报告匹配失败(最少出现一次)

*之前紧邻的元素出现任意多次或者不出现
字符组里面的一些字符不是元字符。(任意次)

{n} 出现n次

{n,m}出现n到m次

{n,}至少出现n次

分组

1.()

//匹配一个字母加一个数字的前两个组合
var reg1=/[a-z]d{2}/g; 
var reg2=/([a-z]d){2}/g; //增加()
var string="a1c2d3adbb";
string.replace(reg1,"A"); //结果为"a1c2d3adbb",没有改变,因为匹配的是字母加上出现2次的数字
string.replace(reg2,"A"); //结果为"Ad3adbb""

2.或|

var reg=/h(o|i)t/g; 
var string="hothithat";
string.replace(reg,"A"); //结果为AAhat

3.反向引用
例如日期格式的转换,由2016-08-16转换为08/16/2016

var reg=/(d{4})-(d{2})-(d{2})/g; 
var string="2016-08-16";
string.replace(reg,"$2/$3/$1"); //结果为08/16/2016

其中$1表示第一组括号匹配的文本,其他类似

4.忽略分组
在分组内加上?:

var reg=/(d{4})-(?:d{2})-(d{2})/g; 
var string="2016-08-16";
string.replace(reg,"$2/$3/$1"); //结果为16/$3/2016,月份已经被忽略,无法通过$加数字进行访问
前瞻

文本尾部方向,为
正向前瞻: exp(?=assert)
负向前瞻: exp(?!assert)
前瞻:匹配到规则的时候,向前检查是否符合断言,javaScript不支持后顾。

var reg=/w(?=d)/g; //找到字母后,判断后面是不是有数字,有的话才符合,替换掉这个字母,但是数字不会替换
var string="h2othi2";
string.replace(reg,"A"); //结果为A2othA2
三. 匹配模式 贪婪模式

极可能多地匹配

var reg=/d{3,6}/g;
var string="123456789";
string.replace(reg,"A"); //结果为"A789",尽可能多的匹配
非贪婪模式

让正则表达式尽可能少的匹配,一旦匹配成功就不再继续尝试。方式是在量词后加上

var reg=/d{3,6}?/g;
var string="123456789";
string.replace(reg,"A"); //结果为"AAA",尽可能多的匹配
四. RegExp对象 创建方法

有两种方法可以创建RegExp对象
a.显式构造函数:

var reg=new RegExp("pattern"[,"flag"]);

b.隐式构造函数:

var reg=/pattern/[flags];

其中,flags可以是一些标志字符的组合

g 为全局标志,将对所有匹配的部分起作用,如果不设置,仅搜索和替换最早匹配的内容
i为 忽略大小写的标志,如果设置,忽略大小写
m 为多行标志,如果设置,“^”还可以与被搜索字符串的 n 或 r 之后的位置进行匹配

例如:

/ab+c/i;
new RegExp("ab+c","i");
RegExp对象的属性

global:布尔值

ignoreCase:布尔值

lastIndex:整数,表示开始搜索下一个匹配项的字符位置

multiLine:布尔值

source:正则表达式的字符串表示

RegExp对象的方法 exec
rgExp.exec(str)

返回值:如果没有找到匹配返回null,如果找到则返回一个数组
返回的数组有三个属性,分别是input、index和lastIndex

    input包含了查找的字符串,
    index属性包含了整个被查找字符串中被匹配的子字符串的位置,
    lastIndex属性中包含了最后一次匹配中最后一个字符的下一个位置
test
rgexp.test(str)

返回值:如果存在一个模式,返回true

match
stringObj.match(rgExp)

返回值:如果没有找到匹配返回null,如果找到则返回一个数组
返回的数组有三个属性,分别是input、index和lastIndex,input包含了查找的字符串,index属性包含了整个被查找字符串中被匹配的子字符串的位置,lastIndex属性中包含了最后一次匹配中最后一个字符的下一个位置

search
stringObj.search(rgExp);

返回值:如果存在,则返回 一个整数值,指明这个匹配距离字符串开始的偏移位置。
没有找到则返回-1

replace
replace(rgExp,replaceText);
split
split([separator[,limit]])

separator 分割标识符参数,可以是多个字符或一个正则表达式
limit 限制返回元素的个数

五. 参考资料

《JavaScript高级程序设计》

《JavaScript正则表达式》课程, Samaritan89

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80069.html

相关文章

  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • JS中的正则达式

    摘要:构造函数可以有两个字符串参数,第一个参数包含正则表达式的主体部分。只读的布尔值,说明这个正则表达式是否带有修饰符。中正则的扩展构造函数在中,只能接受字符串作为参数,允许其直接接受正则表达式作为参数。 上文传送门:初探正则表达式 正则表达式是一个描述字符模式的对象,JavaScript 的 RegExp 类表示正则表达式,String 和 RegExp 都定义了方法,后者使用正则表达式进...

    Soarkey 评论0 收藏0
  • JavaScript正则达式总结

    摘要:正则表达式一直是里比较难以掌握的点。在中创建正则的两种方式使用字面量这就是正则表达式的字面量语法,表示正则表达式的模式,为正则表达式的标志。字面量形式的正则表达式一般使用较多,也推荐大家尽可能使用这种形式,简洁易读,符合正常的使用习惯。 正则表达式一直是js里比较难以掌握的点。 看不懂,学不会,记不住。 每次需要用到正则的时候,都需要再去查找资料。 今天花时间把正则的知识点总结下,希望...

    big_cat 评论0 收藏0
  • 正则与JS中的正则

    摘要:注意本文将正则与中的正则分开讨论。正则零宽断言更多参考各种语言对于正则不同支持参考单行模式与多行模式通过设置正则表达式后的修饰符可开启对应的匹配模式单行模式和多行模式。 最近这段时间帮同学处理一些文档, 涉及到一些结构化文档的工作大部分都得使用正则表达式, 之前对于正则的认识大多来源于语言书上那几页的介绍, 自己也没有用过几次。这里将我之前感到模糊的概念作个整理。因为对JS了解多点,所...

    firim 评论0 收藏0
  • JavaScript正则达式的匹配模式

    摘要:选择分组和引用正则表达式的语法还包括指定选择项子表达式分组和引用前一子表达式的特殊字符。带圆括号的表达式的另一个用途是允许在同一正则表达式的后部引用前面的子表达式。 正则表达式(regular expression)是一个描述字符模式的对象。JavaScript的 RegExp类 表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进 行强大的模式匹配和文本检索与...

    wqj97 评论0 收藏0
  • 正则达式

    摘要:最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。学习目标了解正则表达式语法在中使用正则表达式在中使 JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经验,进行扩展延伸,同时指出书里的一些问题。将会讨论安全的类型检测、惰性载入函数、冻结对象、定时器等话题。1. 安全的类型检测...

    yibinnn 评论0 收藏0

发表评论

0条评论

Noodles

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<