资讯专栏INFORMATION COLUMN

正则表达式

yuanzhanghu / 2886人阅读

摘要:零宽断言一般的正则表达式匹配,都是有宽度的,如。零宽度正先行断言仅当子表达式在此位置的右侧匹配时才继续匹配。文档对象方法方法用于检索字符串中的正则表达式的匹配,返回一个数组,其中存放匹配的结果。

正则表达式

MDN文档

名词解析

1. 断言
断言,就是指明某个字符串前边或者后边,将会出现满足某种规律的字符串。

零宽断言:一般的正则表达式匹配,都是有 宽度 的,如:w+。 会将 "。" 一同匹配到。如果像 "。" 这样的内容只是一种判断条件,即不想被正则匹配到,就要使用到 零宽断言了。

(?=X)零宽度正先行断言:仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。例如,w+(?=d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。
(?!X)零宽度负先行断言:仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如,例如,w+(?!d) 与后不跟数字的单词匹配,而不与该数字匹配 。
(?<=X)零宽度正后发断言:仅当子表达式 X 在 此位置的左侧匹配时才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。
(?:仅当子表达式 X 不在此位置的左侧匹配时才继续匹配。例如,(?

目前JS只支持先行断言,后发断言还不支持。不过目前chrome支持了后发断言。

2. 分组

分组的类型(四种):

捕获型   - ()

非捕获型  - (?:)

正向前瞻型 - (?=)

反向前瞻型 - (?!)

其中只有捕获型分组会暂存匹配到的串。

一个分组中可以写多个表达式:(表达式1|表达式2|表达式3), 表示匹配其中任意一个表达式。
分组可以通过将某些表达式组合成整体,这样可以简化表达式的书写。例如将/testtesttest/写为/(test){3}/

3. 捕获与引用

1) 嵌套分组的捕获: 规则是以左括号出现的顺序进行捕获


var reg = /((kid) is (a (doubi)))/
var str = "kid is a doubi"

reg.test( str ) // true

console.log(RegExp.$1) // kid is a doubi
console.log(RegExp.$2) // kid
console.log(RegExp.$3) // a doubi
console.log(RegExp.$4) // doubi

通过 $1 可以引用捕获的字符串

2) replace中捕获的使用:

3) 反向引用

正则表达式里也能进行引用,这称为反向引用:


var reg = /(w{3}) is 1/

reg.test("kid is kid") // true
reg.test("dik is dik") // true
reg.test("kid is dik") // false
reg.test("dik is kid") // false

1引用了第一个被分组所捕获的串,换言之,表达式是动态决定的。

注意,如果编号越界了,则会被当成普通的表达式:


var reg = /(w{3}) is 6/;

reg.test( "kid is kid" ); // false
reg.test( "kid is 6" ); // true

3. 字符集合

通常字符集合有由[]方括号括起来。

方法

exec、test、match、replace
segmentfault文章

replace默认只替换第一个匹配到的字符串。
mdn文档RegExp对象

JavaScript exec() 方法

RegExpObject.exec(string)
exec() 方法用于检索字符串中的正则表达式的匹配,返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null;
情况 1)RegExp为非全局正则表达式;
情况 2)RegExp为全局正则表达式,exec()可以像迭代器那样,多次调用,获得匹配值;

JavaScript test() 方法

RegExpObject.test(string)
如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false

String.prototype.replace()方法

W3 replace方法
MDN replace方法

更多博客:https://github.com/Lmagic16/blog

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

转载请注明本文地址:https://www.ucloud.cn/yun/98167.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条评论

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