电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

程序员必须掌握的正则表达式

28页
  • 卖家[上传人]:自***
  • 文档编号:80696889
  • 上传时间:2019-02-19
  • 文档格式:DOC
  • 文档大小:171.80KB
  • / 28 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、程序员必须掌握的正则表达式概述正则表达式,可以说是任何一种编程语言都提供的机制,它主要是提供了对字符串的处理能力。正则表达式在页面处理中的使用场景:1)表单验证。验证某些域符合某种规则,例如邮件输入框必须输入的是邮件、联系电话输入框输入的必须是数字等等2)处理DOM模型。例如通过表达式定位DOM中的一个对象或一系列对象,一个例子就是定位id属性中含有某个特殊字符的div对象。3)纯编程逻辑。直接用于编程的逻辑之中。说明:本部分所举的正则表达式的代码片断,都是经过测试的,但有一点需要注意,对于换行的字符串的定义,我们在表述时使用的是类似如下的形式:var str=“Its isa beautiful city”;这种形式直接写在JS代码中是错误的,那如何获取具有换行的字符串呢?简单的办法:在textarea中输入文本并换行,然后将该值赋给JS变量即可。例如:var str=document.forms0.mytextarea.value;二,语法与使用1,定义正则表达式1)定义正则表达式有两种形式,一种是普通方式,一种是构造函数方式。2)普通方式:var reg=/表达式/附加参数表达式

      2、:一个字符串,代表了某种规则,其中可以使用某些特殊字符,来代表特殊的规则,后面会详细说明。附加参数:用来扩展表达式的含义,目前主要有三个参数:g:代表可以进行全局匹配。i:代表不区分大小写匹配。m:代表可以进行多行匹配。上面三个参数,可以任意组合,代表复合含义,当然也可以不加参数。例子:var reg=/a*b/;var reg=/abc+f/g;3)构造函数方式:varreg=newRegExp(“表达式”,”附加参数”);其中“表达式”与“附加参数”的含义与上面那种定义方式中的含义相同。例子:var reg=new RegExp(“a*b”);var reg=new RegExp(“abc+f”,”g”);4)普通方式与构造函数方式的区别普通方式中的表达式必须是一个常量字符串,而构造函数中的表达式可以是常量字符串,也可以是一个js变量,例如根据用户的输入来作为表达式参数等等:var reg=new RegExp(document.forms0.exprfiled.value,”g”);2,表达式模式1)表达式模式,是指表达式的表达方式与样式, 即 var reg=/表达式/附加参数

      3、 中的“表达式”怎样去描述?2)从规范上讲,表达式模式分为简单模式和复合模式。3)简单模式:是指通过普通字符的组合来表达的模式,例如var reg=/abc0d/;可见简单模式只能表示具体的匹配。4)复合模式:是指含有通配符来表达的模式,例如:var reg=/a+b?/w/;其中的+、?和/w都属于通配符,代表着特殊的含义。因此复合模式可以表达更为抽象化的逻辑。下面我们着重说一下复合模式中各个通配符的含义及其使用。5)复合模式中特殊字符的讲解:1/:在许多编程语言里面被用作转义符,一般来说/符号后面如果跟的是普通字符c,那么/c就代表特殊的含义,例如n本来代表字符n,但/n就代表换行。/符号后面如果跟的是特殊字符c,那么/c就代表普通字符c,例如/一般用作转义符,但/则调表普通字符/。Javascript的正则表达式中/的用法与上面相同,只是不同的编程语言,特殊字符表可能不太一样罢了。2:匹配输入字符串的起始端,如果是多行匹配,即表达式的附加参数中含有m,则也在一个换行符后匹配。例子:/B/匹配 “Bab Bc ”中的第一个B例子2:/B/gm匹配 “Badd B cdaf B ds

      4、fB” 中的第一行第一个B,第三行中的第一个B3$:匹配输入字符创的尾端,如果是多行匹配,即表达式的附加参数中含有m,则也在一个换行符前匹配。与的用法相反。例子:/t$/匹配“bat”中的t,但是不匹配“hate”中的t例子2:/t$/匹配“tag atbat”中第一行的最后一个t和第二行的t。4*:匹配前一个字符0次或多次。例子:/ab*/匹配“dddabbbbc”中的“abbbb”,也匹配“ddda”中的“a”5+:匹配前一个字符1次或多次。例子:/ab+/匹配“dddabbbbc”中的“abbbb”,但不匹配“ddda”与后面的1,(原型:n,)的用法类似6?:?的用法比较特殊,一般来说它用来对前一个字符做0次或1次匹配,但是它有另外两种特殊的用法:如果紧跟在*、+、?和 之后,则表示原始匹配的最小次数匹配,例如:/ba*/本来匹配“bbbaaaa”中的“baaaa”,但是/ba*?/则匹配“bbbaaaa”中的“b”(因为*表示0次或多次匹配,而加?应该表示最少次数匹配,即0次匹配)。同理:/ba+?/则匹配“baaaa”中的“ba”。作为语法结构符号,使用于前置断言中,即后面

      5、要说到的x(?=y)和x(?!=y)7.:小数点中的“.”号,匹配任何一个单独的字符,但是换行符除外。标准中总共有哪些字符?请参考:字符集例如:/a.b/匹配“acbaa”中的“acb”,但是不匹配“abbb”。8(x):表示匹配x(并非特指字符x或者特指一个字符,x表示一个字符串),而且匹配会被记住,在语法中这种()被称为“capturing parentheses ”,即捕捉用的小括号。匹配会被记住,是因为在表达式提供的函数中,有些函数返回一个数组,该数组会保存所匹配的所有字符串,例如exec()函数。另外还要注意()中的x被记住的前提是匹配x。例子1:var regx=/a(b)c/;var rs=regx.exec(“abcddd”);从上面可以看出,/a(b)c/匹配“abcddd”中的“abc”,因为()的原因,b也会记录下来,因此rs返回的数字内容为:abc,b例子2:var regx=/a(b)c/;var rs=regx.exec(“acbcddd”);rs返回null,因为/a(b)c/不匹配“acbcddd”,所以()中的b不会被记录下来(尽管字符串中含有b)9(

      6、?:x):匹配x,但不会记住x,这种格式中的()被称为“non-capturing parentheses ”,即非捕捉用的小括号。例子:var regx=/a(?:b)c/;var rs=regx.exec(“abcddd”);从上面可以看出,/a(?:b)c/匹配“abcddd”中的“abc”,因为(?:)的原因,b不会记录下来,因此rs返回的数字内容为:abc10X(?=y):匹配x,仅当后面紧跟着y时。如果符合匹配,则只有x会被记住,y不会被记住。例子:var regx=/user(?=name)/;var rs=regx.exec(“The username is Mary”);结果:匹配成功,而且rs的值为user11X(?!y):匹配x,仅当后面不紧跟着y时。如果符合匹配,则只有x会被记住,y不会被记住。例子:var regx=/user(?!name)/;var rs=regx.exec(“The user name is Mary”);结果:匹配成功,而且rs的值为user例子2:var regx=/d+(?!/.)/;var rs=regx.exec(“54.235

      7、”);结果:匹配成果,rs的值为5,不匹配54是因为54后面跟着“.”号,当然235也匹配,但是由于exec方法的行为,235不会被返回12x|y:匹配x或y。注意如果x和y都匹配上了,那么只记住x。例子:var regx=/beijing|shanghai/;var rs=regx.exec(“I love beijing and shanghai”);结果:匹配成功,rs的值为beijing,虽然shanghai也匹配,但不会被记住。13n:匹配前一个字符的n次出现。n必须是一个非负数,当然如果是一个负数或小数也不会报语法错误。例子:var regx=/ab2c/;var rs=regx.exec(“abbcd”);结果:匹配成功,rs的值为:abbc。14n,:匹配前一个字符的至少n次出现。例子:var regx=/ab2,c/;var rs=regx.exec(“abbcdabbbc”);结果:匹配成功,rs的值为:abbc。注意为什么abbbc也符合条件为什么没有被记住,这与exec方法的行为有关,后面会统一讲解。15n,m:匹配前一个字符的至少n次最多m次的出现。只要n与m

      8、为数字,而且m=n就不会报语法错误。例子:var regx=/ab2,5c/;var rs=regx.exec(“abbbcd”);结果:匹配成功,rs的值为:abbbc。例子2:var regx=/ab2,2c/;var rs=regx.exec(“abbcd”);结果:匹配成功,rs的值为:abbc。例子3:var regx=/ab(2,5)/;var rs=regx.exec(“abbbbbbbbbb”);结果:匹配成功,rs的值为:abbbbb,这说明,如果前一个字符出现多于m次,则只匹配m次。另外:var regx=/ab(2,5)c/;var rs=regx.exec(“abbbbbbbbbbc”);结果:匹配失败,rs的值为:null,为什么匹配失败,因为b多于5个则b(2,5)会匹配前5个b,而表达式/ab(2,5)c/中b后面是c,但字符串中5个b之后还是b所以会报错。16xyz:xyz表示一个字符串,该模式表示匹配中的一个字符,形式上xyz等同于x-z。例子:var regx=/abcd/;var rs=regx.exec(“abddgg”);结果:匹配成功,rs的值为:abd例子2:var regx=/abcd/;var rs=regx.exec(“abcd”);结果:匹配失败,rs的值为:null,之所以失败,是因为bc表示匹配b或c中的一个,但不会同时匹配。17xyz:该模式表示匹配非中的一个字符,形式上xyz等同于x-z。例子:var regx=/abcd/;var rs=regx.exec(“afddgg”);结果:匹配成功,rs的值为:afd例子2:var regx=/abcd/;var rs=regx.exec(“abd”);结果:匹配失败,rs的值为:。18/b:匹配退格键。19/b:匹配一个词的边界符,例如空格和换行符等等,当然匹配换行符时,表达式应该附加参数m。例子:var regx=/bc./;var rs=regx.exec(“Beijing is a beautiful city”);结果:匹配成功,rs的值为:ci,注意c前边的空格不会匹配到结果中,即 ci是不正确的。20/B:代表一个非单词边界。例子:var regx=/Bi./;var rs=regx.exec(“Beiji

      《程序员必须掌握的正则表达式》由会员自***分享,可在线阅读,更多相关《程序员必须掌握的正则表达式》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结
     
    收藏店铺
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.