热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript正则断言的明白

之前大三进修《编译道理》的时刻先生讲了点叫断言的东西,然则这门课压根就没听懂过,所以一向找不到有价值的东西,好吧谅解我懒散蒙昧,理论不合适我,我只合适搬砖。好久以后一些关于正则的黑

之前大三进修《编译道理》的时刻先生讲了点叫断言的东西,然则这门课压根就没听懂过,所以一向找不到有价值的东西,好吧谅解我懒散蒙昧,理论不合适我,我只合适搬砖。好久以后一些关于正则的黑科技才发明正则里也有较断言的东东,好吧得相识相识这是什么。

那末正则里的断言是什么?

援用一段来自百科的申明

用于查找在某些内容(但并不包括这些内容)之前或以后的东西,也就是说它们像b,^,$那样用于指定一个位置,这个位置应当满足一定的前提(即断言),因而它们也被称为零宽断言。(来自百度百科)

断言在一些课本里也称作环顾

断言写法

  • 前瞻断言

    • (?=exp) 递次一定环顾,示意所在位置右侧能够婚配exp

    • (?!exp) 递次否认环顾,示意所在位置右侧不能婚配exp

  • 后瞻断言

    • (?<=exp) 逆序一定环顾,示意所在位置左边能够婚配exp

    • (? 逆序否认环顾,示意所在位置左边不能婚配exp

剖析:
前瞻断言(从当前位置向前测试)和后瞻断言(从当前位置向后测试)。

详细的例子看运用方法吧。

注:

  • 括号是必需的,写法:(?!=&#8230;)

  • 有些言语并不完整支撑,比方:Javascript的正则并不支撑后瞻断言表达式,运用了会报错的。

  • 个中exp是一个正则表达式可所以子模式,如:(?=((exp))

  • 环顾也称断言;断言是不占用字符串的((?=exp)所以不能援用,exp是占用字符串的)

运用方法

  • (?=exp) 递次一定环顾,示意所在位置右侧能够婚配exp

来个Javascript的例子,婚配.gif的文件名

var s="img.jpg,abc.gif,123.jpeg";
s.match(/\w*(?=\.gif)/);

结果:["abc"]

/\w*(?=\.gif)/中的\w*示意能够有零个或多个字符,婚配到的是abc,那末(?=.gif)这个婚配到什么?实在他婚配到的只是一个位置,这就是断言的初志,婚配到的是介于abc.gif的位置。
好吧不信来考证下:
去掉正则表达式的\w*,在婚配到的内容替换成#

var s="img.jpg,abc.gif,123.jpeg";
s.replace(/(?=\.gif)/,"#");

结果:"img.jpg,abc#.gif,123.jpeg"

回到定义:(?=exp)递次一定环顾,示意所在位置右侧能够婚配exp;那末/\w*(?=\.gif)/的意义就是以.gif作为右侧的位置才婚配胜利,那就会婚配到abc.gif这里就胜利了,之前说过断言婚配不占用字符宽度(即不结果不会包括断言部份),所以婚配到的字符串就是\w*即&#8217;abc&#8217;。

  • (?!exp) 递次否认环顾,示意所在位置右侧不能婚配exp

例子:婚配非.gif的文件名

var s="img.jpg,abc.gif,123.jpeg";
s.match(/(\w*)(?:\.)(?!gif)\w*/g);

结果:["img.jpg", "123.jpeg"]

/(\w*)(?:\.)(?!gif)\w*/g这个正则示意(\w*)(?:\.)的右侧不是gif婚配胜利。

关于后瞻断言的例子这里不举例子,假如哪位有空填下吧。

运用例子

来看一个来自收集的问答例子:把一串数10000000000字以,分隔成10,000,000,000

这个例子0有点多看着刺眼,先从简朴的最先;好吧我们换一串字符串比方:12345678转换成12,345,678

正则怎样完成呢?
看代码:

var s="12345678";
s.replace(/(?=(\d{3})+(?!\d))/g,",");

是的就这样就能够了。
好吧,来剖析下道理:

/(?=(\d{3})+(?!\d))/g,个中(\d{3})+示意前面的三个数字串最少涌现一组,而后接(?!\d)则示意的是数字的右侧不是数字,
那末就是末端,那/(?=(\d{3})+(?!\d))/婚配到的位置就是12345678之间的位置,加了g表全局婚配,
所以继承婚配到满足前提的345678之间的位置,在这些加,就有了12,345,678了。

假如想看这个例子的历程能够改写下代码:


var s="12345678";
s.replace(/(?=((\d{3})+)(?!\d))/g,function(){console.log(arguments);return ","});

结果:
轮回1: ["", "345678", "678", 2, "12345678"]
轮回2: ["", "678", "678", 5, "12345678"]
返回值:"12,345,678"

好吧,道理不再细说,本身到浏览器控制台实行看结果。

那末这个10000000000转成10,000,000,000就很简朴了。

然则假如数字串的位数是3的倍数会涌如今数字串前面也有一个,号,好吧再正则去掉result.replace(",","")

后语

上面举的一些例子能够不足以申明题目,假如你是通晓正则的高手望勿喷,固然多多指教那就更好了。


推荐阅读
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
author-avatar
手机用户2502872807
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有