JavaScript中的正则表达式快速入门

别再只会用`tc qdisc`了!手把手教你用TC的`class``filter`给服务器流量做精细化管理 本文详细介绍了如何利用TC的`class``filter`实现服务器流量的精细化管理,解决关键业务饥饿、突发流量冲击等问题。通过HTB算法多层次带宽分配,结合端口、IP地址cgroup等过滤条件,提升网络资源利用效率。适用于Linux服务器管理员网络工程师。 阅读详情

简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可

以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl

PHP脚本语言,以及awksed

      shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的

支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的

概念和功能。

 

        正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模

式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是

否包含匹配模式,执行相应的程序。

 

        举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件

地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表

单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹

出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判

断中具有举足轻重的作用。

 

      基本语法

        在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表

达式的语法格式。

        正则表达式的形式一般如下:

        /love/

        其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只

要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定

制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具

有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象

中的出现模式。

 

        较为常用的元字符包括:“+”,“*”,以及

      ?”。其中,“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,“*

元字符规定其前导字符必须在目标对象中出现零次或连续多次,而“?”元字符规定其前导对

象必须在目标对象中连续出现零次或一次。

 

        下面,就让我们来看一下正则表达式元字符的具体应用。

        /fo+/

        因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的“fool, fo,

或者

      football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。

        /eg*/

        因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的“easy, ego,

或者

      egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。

        /Wil?/

        因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的“Win,

      Wilson,等在字母i后面连续出现零个或一个字母l的字符串相匹配。

        除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,

        /jim/

        上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则

表达式可以同jimmyjimmmmmy等字符串相匹配。

        在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字

符的使用方式。

        \s:用于匹配单个空格符,包括tab键和换行符;

        \S:用于匹配除单个空格符之外的所有字符;

        \d:用于匹配从09的数字;

        \w:用于匹配字母,数字或下划线字符;

        \W:用于匹配所有与\w不匹配的字符;

        . :用于匹配除换行符之外的所有字符。

        (说明:我们可以把\s\S以及\w\W看作互为逆运算)

        下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。

        /\s+/

        上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。

        /\d000/

        如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易

举的查找到所有总额达千元的款项。

        除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专

用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。

        较为常用的定位符包括:“^, $, \b”以及

      \B”。其中,“^”定位符规定匹配模式必须出现在目标字符串的开头,“$”定位符规

定匹配模式必须出现在目标对象的结尾,\b定位符规定匹配模式必须出现在目标字符串的开

头或结尾的两个边界之一,而“\B”定位符则规定匹配对象必须位于目标字符串的开头和结

尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。

同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举

例来说:

 

        /^hell/

        因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以“hell,

hello”或“hellhound”开头的字符串相匹配。

        /ar$/

        因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以“car, bar

或“ar”结尾的字符串相匹配。

        /\bbom/

        因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以“bomb,

或“bom”开头的字符串相匹配。

        /man\b/

        因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以“human,

woman”或“man”结尾的字符串相匹配。

        为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式

中指定某一个范围而不局限于具体的字符。例如:

        /[A-Z]/

        上述正则表达式将会与从AZ范围内任何一个大写字母相匹配。

        /[a-z]/

        上述正则表达式将会与从az范围内任何一个小写字母相匹配。

        /[0-9]/

        上述正则表达式将会与从09范围内任何一个数字相匹配。

        /([a-z][A-Z][0-9])+/

        上述正则表达式将会与任何由字母和数字组成的字符串,如“aB0”等相匹配。

这里需要提醒用户注意的一点就是可以在正则表达式中使用“()

      把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述

正则表达式将无法与诸如

      abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。

        如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的

模式中任选一个进行匹配的话,可以使用管道符“|”。例如:

        /to|too|2/

        上述正则表达式将会与目标对象中的“to, too, 或“2”相匹配。

        正则表达式中还有一个较为常用的运算符,即否定符“[^]”。与我们前文所介绍

的定位符“^”不同,否定符

      [^]”规定目标对象中不能存在模式中所规定的字符串。例如:

        /[^A-C]/

        上述字符串将会与目标对象中除AB,和C之外的任何字符相匹配。一般来说,

当“^”出现在

      []”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应

当被视做定位符。

        最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可

以使用转义符“\”。例如:

        /Th\*/

        上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。

      使用实例

 

在对正则表达式有了较为全面的了解之后,我们就来看一下如何在PerlPHP

以及JavaScript中使用正则表达式。

        通常,Perl中正则表达式的使用格式如下:

        operator / regular-expression / string-to-replace / modifiers

        运算符一项可以是ms,分别代表匹配运算和替换运算。

        其中,正则表达式一项是将要进行匹配或替换操作的模式,可以由任意字符,元

字符,或定位符等组成。替换字符串一项是使用s运算符时,对查找到的模式匹配对象进行

替换的字符串。最后的参数项用来控制不同的匹配或替换方式。例如:

 

        s/geed/good/

        将会在目标对象中查找第一个出现的geed字串,并将其替换为good。如果我们

希望在目标对象的全局范围内执行多次查找—替换操作的话,可以使用参数

      g”,即s/love/lust/g

        此外,如果我们不需要限制匹配的大小写形式的话,可以使用参数“i ”。例如,

        m/JewEL/i

        上述正则表达式将会与目标对象中的jewelJewel,或JEWEL相匹配。

        在Perl中,使用专门的运算符“=~”指定正则表达式的匹配对象。例如:

        $flag =~ s/abc/ABC/

        上述正则表达式将会把变量$flag中的字串abc替换为ABC

        下面,我们就在Perl程序中加入正则表达式,验证用户邮件地址格式的有效性。

代码如下:

      --------------------------------------------------------

        #!/usr/bin/perl

        # get input

        print What's your email address?\n;

        $email = <STDIN>

        chomp($email);

        # match and display result

        if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/)

        {

        print(Your email address is correct!\n);

        }

        else

         {

          print(Please try again!\n);

         }

      --------------------------------------------------------

        如果用户更偏爱PHP的话,可以使用ereg()函数进行模式匹配操作。ereg()函数

的使用格式如下:

         ereg(pattern, string)

        其中,pattern代表正则表达式的模式,而string则是执行查找替换操作的目标

对象。同样是验证邮件地址,使用PHP编写的程序代码如下:

      --------------------------------------------------------

        <?php

         if

      (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+”,$email))

          { echo Your email address is correct!;}

         else

          { echo Please try again!;}

         ?>

      --------------------------------------------------------

        最后,我们在来看一下JavaScriptJavaScript

      1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其

中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回truefalse

 

        我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。

      --------------------------------------------------------

        <html>

         <head>

          <script language="Javascript1.2">

           <!-- start hiding

           function verifyAddress(obj)

           {

            var email = obj.email.value;

            var pattern =

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

            flag = pattern.test(email);

            if(flag)

            {

             alert(Your email address is correct!);

             return true;

            }

            else

             {

              alert(Please try again!);

              return false;

              }

            }

           // stop hiding -->

          </script>

         </head>

         <body>

 

         <input name="email" type="text" id="email" onBlur="verifyAddress(this)">

         

        </body>

       </html>

      --------------------------------------------------------

      Perl的经典用法:用正则表达式对文件进行操作

      本文出自:www.zdnet.com.cn 作者:Nathan Torkington (2001-12-29 13:02:04)

      一旦你有个包含了整个串的变量,你可以使用正则表达式,对整个文件进行操作,

      而不是对文件中的某个块进行操作。有两个有用的正则表达式标记/s/m。一般,Perl

的正则表达式对行进行处理,你可以这样写:

      undef $/;

      $line = ;

      if ($line =~ /(b.*grass)$/) {

      print "found $1\n";

      }

 

      如果把我们的文件填入如下内容: browngrass

      bluegrass

      则输出为:

      found bluegrass

      它没有找到“browngrass”,这是因为$ 仅在串尾寻找其匹配, (或者在串结束前的

一行)。如果在包含很多行的串中,用"^"

      "$"来匹配,, 我们可以使用 /m ("multiline") 选项:

      if ($line =~ /(b.*grass)$/m) {}

      现在程序会把如下的信息输出:

      found browngrass

      类似地,句点可以匹配除了换行符之外的所有字符:

      while () {

      if (/19(.*)$/) {

      if ($1 < 20) {

      $year = 2000+$1;

      } else {

      $year = 1900+$1;

      }

      }

      }

 

      如果我们从文件中读入“1981”,$_ 将包含“1981\n”。正则表达式中的句点匹配“8

和“1,

      而不匹配“\n”。这里正需要这样做,因为换行符不是日期的组成部分。

      对于一个包含很多行的串,我们也许要提取其中的大的块,这些块可能会跨越行分隔

符。在这种情况下,我们可以使用 /s

      选项,并用句点来匹配除了换行符以外的所有字符。

      if (m{(.*?)}s) {

      print "Found bold text: $1\n";

      }

 

      此处,我用了{}来表示正则表达式的起始和结束,而不用斜杠,所以,我就可以告诉

Perl我正在匹配,起始字符为"m",结束字符为"s"。你

      可以把/s /m 选项组合使用:

      if (m{^(.*?)}sm) {

      # ...

      }

 

      总结

      有两种方法打开文件:open()函数的特点是快速简捷,而sysopen()函数功能强大而

复杂。通过操作符,可以读入一个记录,$/

      变量可以让你控制记录是什么。如果你打算把很多行的内容读入到一个串中,不要使

用忘记/s/m 这两个正则表达式标记。

 转自:http://bbs.csdn.net/topics/80476734中的回复

 

别再死记硬背了!用华为交换机MQC配置QoS,一个真实企业网案例带你搞懂流分类、流行为与流策略 本文通过一个真实制造业企业网络案例,详细解析华为交换机MQC配置QoS的全流程,包括流分类、流行为与流策略的核心要素。帮助企业解决视频会议卡顿、VoIP通话质量不稳定等问题,提升关键业务的服务质量。 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化-——第十五篇云计算 11 算法篇

在百万级虚拟机、百万级租户的超大规模云环境中,核心算法挑战包括:挑战维度具体问题算法需求技术复杂度规模性​百万级对象发管理分布式算法、分区算法极高(NP-hard问题)多租户​租户间隔离与资源共享公平性算法、隔离算法高(多目标优化)动态性​资源需求实时变化自适应算法、在线算法高(实时决策)异构性​硬件/负载/需求差异分类算法、匹配算法中高(多维度优化)经济性​资源利用率与成本平衡优化算法、博弈论算法高(多目标博弈)以下是按领域分类的详细算法列表:算法名称数学建模表达核心思想时间复杂度适用场景推理步骤首次适

weixin_49199313的博客 1279

string正则表达式

一个正则表达式测试(只可输入中文、字母数字)       在项目中碰到了正则表达式的运用,正则还是非常强大的,不管什么编程语言,基本上都可以用到。之前在用java时特别是对用户名或密码使用正则非常爽,写脚本上用正则也非常爽,可是到了OC这却把我虐了一把,可能是对OC掌握的不够。这里就罗列了从网上找的很有用的资料,感谢大神们的贡献。 首先举一个例子: 匹配9-15个由字母/数字组成的字符

wsyjx22的专栏 2075

【信息科学与工程学】【数据中心】【智算中心】第二十六篇 计费系统篇02

在云计算与电信网络深度融合的背景下,云服务商(如阿里云、腾讯云、UCloud等)与电信运营商(中国电信、移动、联通)通过创新联合计费模式,显著降低了企业用云成本。这些模式主要围绕展开。

weixin_49199313的博客 1254

正则表达式-模式匹配

模式匹配利用 () 分组利用 | 匹配多个分组利用 ? 实现可选匹配利用 * 匹配 0 次或多次利用 + 匹配 1 次或多次利用 {} 匹配特定次数 利用 () 分组 假定需要对区号进行分离,添加()可以实现分组:(\d\d\d)-(\d\d\d)-(\d\d\d\d),使用 group() 方法从分组中匹配文本。 向 group() 传入整数参数,参数介绍: ①传入 0 或 不传入参数 : 返回整个匹配文本 ②传入 1 获取第1组,传入 2 获取第2组,传入 3 获取第3组 另外,使用 groups()

^-^ 481

正则表达式匹配

(注:元字符包括 | ( ) [ ] { } ^ $ * + ? . ) 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:ns*r 评注:可以用来删除空

龙胜LONGAIN 642

字符串正则表达式匹配

1.本题知识点    字符串、递归 2. 题目描述   请实现一个函数用来匹配包括 . * 的正则表达式。模式中的字符 . 表示任意一个字符,而 * 表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a""ab*ac*a"匹配,但是与"aa.a""ab*a"均不匹配。 3. 思路    这题对编程来说没多大难度,...

守得云开见月明 1万+

JavaScript笔记-正则表达式

JavaScript笔记-正则表达式 @[JavaScript笔记-正则表达式] 初识( 正则表达式是用来干嘛的?) 正则表达式(regular expression,简称RegEx)是一种工具 工具人-正则表达式-出现场景: *(从大量文本中查找符合某一规则的文本、验证用户输入是否符合格式等) 你正在搜索一个文件,这个文件里包含着单词car(不区分字母大小写),但你不想把包含着字符串car的其他单词(比如scar、carryincarcerate等)也找出来。 你正在编辑一段源代码且要把所有

m0_56195776的博客 366

Docker 27 + Raspberry Pi 5 + LoRaWAN网关部署手册(含农机作业轨迹回传QoS保障策略,实测丢包率<0.3%)

面向智慧农场的Docker 27农业物联网部署案例,基于Raspberry Pi 5与LoRaWAN网关实现农机轨迹实时回传,通过QoS分级策略实测丢包率<0.3%。适用于边缘弱网环境,支持容器化快速部署与OTA升级,稳定性与可复现性强,值得收藏。

ByteShoal的博客 346

LoRa包转发器实时调度系统:JIT队列算法与时间同步技术终极指南

LoRa包转发器是物联网网关中的核心组件,它负责在LoRa网关网络服务器之间高效转发RF数据包。本文将深入解析其**实时调度系统**的核心技术——JIT(Just-In-Time)队列算法精确时间同步机制,为开发者提供完整的理解实践指南。 ## 📡 LoRa包转发器实时调度系统概述 LoRa包转发器运行在网关主机上,通过IP/UDP链路将集中器接收到的RF数据包转发到服务器,发射服务

gitblog_00897的博客 361

15个嵌入式高价值项目的技术解构与工程原则

嵌入式系统是连接软件逻辑与物理世界的桥梁,其核心在于对硬件资源、实时性、功耗可靠性的协同管控。从MCU选型、外设驱动到传感器融合、低功耗调度,每一环节都需遵循严格的时序预算与物理层约束。本文围绕真实可落地的电子项目案例,深入剖析边缘AI推理、AMOLED图形合成、纯模拟光通信、多节点无线传感等典型场景,揭示RTOS任务调度、DMA传输优化、RTC温度补偿、DShot电机控制等关键技术实现路径。内容覆盖嵌入式开发中高频搜索的‘低功耗设计’‘实时性保障’‘硬件抽象层(HAL)’‘传感器融合’等核心概念,兼顾教

weixin_36277197的博客 206

声纹迷彩技术:在会议发言中植入反PUA病毒

软件测试人员在此技术中扮演守门人角色。通过严谨的验证,不仅能提升系统可靠性,更能推动负责任创新——让会议回归协作本质,而非心理战场。

2501_94480392的博客 155

AI语音交互实现流程优化:从架构设计到性能调优实战

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960121的博客 376

coif小波_Coif5小波在煤岩声发射源定位中的应用研究_王宏伟_荣航_孙朋

forthcominginstability.Wavelethastheadvantageofbetterfiltercharacteristic,andtraditionaltimedelayestimation(TDE)hasaninfluenceonacousticemission(AE)sourcelocationprecision.In...

weixin_36194102的博客 356

【信息科学与工程学】【产品体系】第十一篇 ICT制造业服务器生产

编号设备类别设备子类具体设备型号加工能力精度等级适用范围控制方式1钣金加工设备激光切割机TRUMPF Trulaser 5030切割厚度0.5-20mm±0.05mm机箱面板、支架CNC数控2钣金加工设备数控冲床AMADA EMK 3610 NT冲孔、成型±0.1mm通风孔、安装孔CNC数控3钣金加工设备折弯机AMADA HDS 1303 NT折弯角度精度±0.5°机箱结构件CNC数控4注塑成型设备注塑机ARBURG Allrounder 570 S注射重量5-200g±0.02mm塑料部件、连接器伺服电机

weixin_49199313的博客 1007

LoRa包转发器网络协议:UDP通信与数据包格式详解

LoRa包转发器是LoRa网关中的核心组件,负责将射频数据包通过IP/UDP链路转发到服务器。本文将深入解析LoRa包转发器的网络协议架构、UDP通信机制以及数据包格式设计,帮助初学者普通用户全面理解这一关键技术。 ## 📡 LoRa包转发器网络架构概述 LoRa包转发器运行在网关主机上,通过SPI接口驱动集中器(concentrator)芯片,负责在射频设备网络服务器之间建立通信桥梁。

gitblog_00573的博客 407

【信息科学与工程学】计算机科学与自动化——第十五篇 云计算11——组合数学01

通过物理隔离确保高安全性,同时需解决两条单向通道(A→BB→A)的同步性与数据一致性问题。

weixin_49199313的博客 1000

27.6MB内存掌控百台设备:sfsEdgeStore的工业物联网“轻量化“突破

当我们谈论工业物联网(IIoT)的边缘计算时,一个残酷的现实摆在眼前:高昂的硬件成本正在吞噬项目的利润空间。传统边缘计算方案往往需要配置4GB内存的工控机来运行重型数据库,单台成本高达500元以上,这无形中成为了数字化转型的"隐形税"。然而,从sfsEdgeStore当前的实时仪表板数据来看,这种局面正在被彻底改写。系统当前正稳定运行在占用水平,同时管理着,CPU占用率仅,这比此前宣传的32MB测试数据还要出色。

2503_93751341的博客 899

【信息科学与工程学】【通信工程】第七十六篇 网络解决方案设计03

继续围绕智算中心相关的组网设计、光路设计、波分设计、OTN设备、交换机设备、组网拓扑、网络操作系统、业务区/管理区/存储区、光设计、租户设计、电磁设计、队列设计、QoS设计、调度设计、组合设计等领域。: 若Tpxe​=2min,Tos_install​=5min,Tagent​=0.5min,Tconfig​=0.5min,则Tready​=8min。: 若N=2000,Ms​=2,Nstorage​=128,Mss​=2,则Nip​=2000×2+128×2=4256,需要/20子网。

weixin_49199313的博客 158
上一篇: ExtJs中的xtype类型
下一篇: JavaScript中的Regexp对象
拜雨
博客等级 码龄14年 2粉丝 8原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值