js正则贪婪模式与非贪婪模式

            

类似于贪吃蛇游戏,越吃越长。而贪婪模式就是尽可能多的匹配。      

默认是贪婪模式      (尽可能多的匹配)                                    

例子: var str='12345678 ';                       

   var reg=/\d{3,6}/g    //最多一组6个                   

console.log(str.replace(reg,X))  //X78  

                 

  

非贪婪模式    (尽可能少的匹配)   

例子:var str='12345678';   

  var reg=/\d{3,6}?/g    //最少一组3个 

  var rea=/\d{3,5}?/g 

console.log(str.replace(reg,X))  //XX78

console.log(str.match(rea))   // [ "123" , "456" ]

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

前瞻

//前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/后瞻方向相反
//js不支持后顾
//符合和不符合特定断言称为 肯定/正向匹配 和 否定/负向匹配

//(?=)断言

正向前瞻

例子:var str="a2*34v8"

  var reg=/\w(?=\d)/g;

console.log(str.replace(reg,'X'))  // X2*X4X8

反向前瞻

例子:var str="a2*34v8"

  var reg=/\w(?!\d)/g;

console.log(str.replace(reg,'Y'))  // aY*3YvY

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

对象属性(一般写在//后)

global :是否全文搜索,默认false 简写g
ignoreCase L是否大小写敏感,默认false 简写 i
multiline:多行搜索,默认值是false 简写m
latIndex:是当前表达式匹配内容的最后一个字符串的下一个位置
source:正则表达式的文本字符串

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

RegExp.prototype.test(str)
//用于测试字符串参数中是否存在匹配正则表达式模式的字符串,返回是boolean值
//调用非全局的RegExp对象的exec()时,返回数组
//第一个元素是与正则表达式相匹配的文本
//第二个元素是与RegExpObject的第一个子表达式相匹配的文本
//第三个元素是与RegExp对象的第二个子表达式相匹配的文本,以此类推

例子:var reg=/ \w /g
  console.log(reg.test('a'))  //多次会有影响判断 因为test()检测方法存在不稳定情况,通常第一次执行的时候,正确率是最高的
  while(reg.test('ab')){
  console.log(reg.lastIndex)  //2       每执行一次会从当前位置向下一个位置查询
  }

RegExp.prototype.exec(str)
//使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果
//如果没有匹配的文本则返回null,否组返回一个结果数组:
  //  -  index声明匹配文本的起始字符在字符串的位置
  //  - input存放杯检索的字符串string

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

//search()搜查  (具有懒惰性,找到之后就会停止向后查找)

例子:

var str='a1b2c3d4'
console.log(str.search('a1'));  //0  返回对象位置
console.log(str.search('10'));  //-1    搜索不到显示-1

//index声明匹配文本的起始字符在字符串的位置
//input声明对stringObject的引用

//match()搜查  (具有标准g则match()执行全局检索,找到字符串中的所有匹配字符串)

例子:

var str='a1b2c3d4a1';

var reg=/a1/g;

console.log(str.match(reg));  //  ["a1", "a1"]

var str='a1b2c3d4a1'

var str=var str='a1b2c3d4a1';var reg=/a1/gconsole.log(str.match(reg));//["a1", "a1"]'a1b2c3d4a1'var str='a1b2c3d4a1'

javascript之正则表达式(二)的更多相关文章

  1. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  2. 深入浅出的javascript的正则表达式学习教程

    深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要 ...

  3. 如何对Javascript代码进行二次压缩(混淆)

    如何对Javascript代码进行二次压缩(混淆) 对Javascript代码进行压缩(混淆),可以有效减少传输和加载时间.但是,不是所有的变量(方法)都能被混淆的,一般来说,只有非属性的变量(方法) ...

  4. 谈谈 JavaScript 的正则表达式

    一.背景 最近在做 CMS 系统中不同身份登录用户的权限管理,涉及到对 api 路径的识别去判断是否放行.以前对正则表达式都是敬而远之,要用到的话都是直接复制粘贴现成网上的表达式,看也看不太懂,借这次 ...

  5. 深入浅出Javascript的正则表达式

    深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要 ...

  6. JavaScript学习记录二

    title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  7. JS获取url中query_str JavaScript RegExp 正则表达式基础详谈

    面我们举例一个URL,然后获得它的各个组成部分:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.window.location.href(设置或获取整个 URL ...

  8. 详解Javascript中正则表达式的使用

    正则表达式用来处理字符串特别好用,在JavaScript中能用到正则表达式的地方有很多,本文对正则表达式基础知识和Javascript中正则表达式的使用做一个总结. 第一部分简单列举了正则表达式在Ja ...

  9. javascript类型系统——正则表达式RegExp类型

    × 目录 [1]对象 [2]实例属性 [3]静态属性[4]实例方法 前面的话 前面已经介绍过javascript中正则表达式的基础语法.javascript的RegExp类表示正则表达式,String ...

随机推荐

  1. Android零基础入门第39节:ListActivity和自定义列表项

    原文:Android零基础入门第39节:ListActivity和自定义列表项 相信通过前两期的学习,以及会开发最简单的一些列表界面了吧,那么本期接着来学习更多方法技巧. 一.使用ListActivi ...

  2. EasyUI之combogrid

    html代码: <div class="item-label">@Html.L("Name"):</div> <input id= ...

  3. 使用Boost的DLL库管理动态链接库

    Boost 1.61新增了一个DLL库,跟Qt中的QLibrary类似,提供了跨平台的动态库链接库加载.调用等功能.http://www.boost.org/users/history/version ...

  4. Qt云服务/云计算平台QTC(Qt Cloud Services)入门(0)

    在这个“大数据”的时代,传统的跨平台C++库Qt已经将魔爪丧心病狂的伸向了“云计算”.在2012年的Qt开发者大会上,Qt发布了BaaS(Backend as a Service)服务——Engini ...

  5. 浅谈网络爬虫爬js动态加载网页(一)

    由于别的项目组在做舆情的预言项目,我手头正好没有什么项目,突然心血来潮想研究一下爬虫.分析的简单原型.网上查查这方面的资料还真是多,眼睛都看花了.搜了搜对于我这种新手来说,想做一个简单的爬虫程序,所以 ...

  6. Python一基本数据类型(dict)

    一. 字典的简单介绍    字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后 ...

  7. 10-pymysql的应用

    import pymysql # user = input('请输入用户名:') # pwd = input('请输入密码:') # 1.创建连接 conn = pymysql.connect(hos ...

  8. Error: Cannot find module '@babel/runtime/core-js/object/keys'(npm start报错)

    1.问题描述: 在npm start启动react项目的时候,会出现Cannot find module '@babel/runtime/core-js/object/keys'的报错: 打开:项目根 ...

  9. 解决安装Oracle本地可以访问客户端不能访问

    现象:本地需要修改监听为localhost -->win+r--> sqlplus system/123@xxdb 可以登陆,远程客户端不能登陆:需要将监听修改为IP地址,重启监听:远程可 ...

  10. Linux系统下解锁Oracle的Scott用户

    1).在Oracle用户下面输入命令:lsnrctl status查看监听是否开启,如果未开启则需要开启监听,输入命令:lsnrctl start; 2).如果没有设置监听的话需要先建立一个监听,然后 ...