为了解答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容易犯糊涂的地方再系统总结一下。

总结1:附件参数g的用法

表达式加上参数g之后,表明可以进行全局匹配,注意这里“可以”的含义。我们详细叙述:

1)对于表达式对象的exec方法,不加入g,则只返回第一个匹配,无论执行多少次均是如此,如果加入g,则第一次执行也返回第一个匹配,再执行返回第二个匹配,依次类推。例如
var regx=/user\d/;
var str=“user18dsdfuser2dsfsd”;
var rs=regx.exec(str);//此时rs的值为{user1}
var rs2=regx.exec(str);//此时rs的值依然为{user1}
如果regx=/user\d/g;则rs的值为{user1},rs2的值为{user2}
通过这个例子说明:对于exec方法,表达式加入了g,并不是说执行exec方法就可以返回所有的匹配,而是说加入了g之后,我可以通过某种方式得到所有的匹配,这里的“方式”对于exec而言,就是依次执行这个方法即可。

2)对于表达式对象的test方法,加入g于不加上g没有什么区别。

3)对于String对象的match方法,不加入g,也只是返回第一个匹配,一直执行match方法也总是返回第一个匹配,加入g,则一次返回所有的匹配(注意这与表达式对象的exec方法不同,对于exec而言,表达式即使加上了g,也不会一次返回所有的匹配)。例如:
var regx=/user\d/;
var str=“user1sdfsffuser2dfsdf”;
var rs=str.match(regx);//此时rs的值为{user1}
var rs2=str.match(regx);//此时rs的值依然为{user1}
如果regx=/user\d/g,则rs的值为{user1,user2},rs2的值也为{user1,user2}

4)对于String对象的replace方法,表达式不加入g,则只替换第一个匹配,如果加入g,则替换所有匹配。(开头的三道测试题能很好的说明这一点)

5)对于String对象的split方法,加上g与不加g是一样的,即:
var sep=/user\d/;
var array=“user1dfsfuser2dfsf”.split(sep);
则array的值为{dfsf, dfsf}
此时sep=/user\d/g,返回值是一样的。

6)对于String对象的search方法,加不加g也是一样的。

总结2:附加参数m的用法

附加参数m,表明可以进行多行匹配,但是这个只有当使用^和$模式时才会起作用,在其他的模式中,加不加入m都可以进行多行匹配(其实说多行的字符串也是一个普通字符串),我们举例说明这一点

1)使用^的例子
var regx=/^b./g;
var str=“bd76 dfsdf
sdfsdfs dffs
b76dsf sdfsdf”;
var rs=str.match(regx);
此时加入g和不加入g,都只返回第一个匹配{bd},如果regx=/^b./gm,则返回所有的匹配{bd,b7},注意如果regx=/^b./m,则也只返回第一个匹配。所以,加入m表明可以进行多行匹配,加入g表明可以进行全局匹配,综合到一起就是可以进行多行全局匹配

2)使用其他模式的例子,例如
var regx=/user\d/;
var str=“sdfsfsdfsdf
sdfsuser3 dffs
b76dsf user6”;
var rs=str.match(regx);
此时不加参数g,则返回{user3},加入参数g返回{user3,user6},加不加入m对此没有影响。

3)因此对于m我们要清楚它的使用,记住它只对^和$模式起作用,在这两种模式中,m的作用为:如果不加入m,则只能在第一行进行匹配,如果加入m则可以在所有的行进行匹配。我们再看一个^的例子
var regx=/^b./;
var str=“ret76 dfsdf
bjfsdfs dffs
b76dsf sdfsdf”;
var rs=str.match(regx);
此时rs的值为null,如果加入g,rs的值仍然为null,如果加入m,则rs的值为{bj}(也就是说,在第一行没有找到匹配,因为有参数m,所以可以继续去下面的行去找是否有匹配),如果m和g都加上,则返回{bj,b7}(只加m不加g说明,可以去多行进行匹配,但是找到一个匹配后就返回,加入g表明将多行中所有的匹配返回,当然对于match方法是如此,对于exec呢,则需要执行多次才能依次返回)

总结3:在HTML的textarea输入域中,按一个Enter键,对应的控制字符为“\r\n”,即“回车换行”,而不是“\n\r”,即“换行回车”,我们看一个前面我们举过的例子:
var regx=/a\r\nbc/;
var str=“a
bc”;
var rs=regx.exec(str);
结果:匹配成功,rs的值为:{ },如果表达式为/a\n\rbc/,则不会被匹配,因此在一般的编辑器中一个”Enter”键代表着“回车换行”,而非“换行回车”,至少在textarea域中是这样的。

转载于:https://www.cnblogs.com/acis_/archive/2010/03/30/1700255.html

[转]关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的/g是什么意思?”...相关推荐

  1. 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的/g是什么意思?”...

    为了解答"正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?"这个问题,也为了能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点和容 ...

  2. 正则表达式中的g是什么意思

    为了解答" 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?"这个问题,也为了 能够便于大家对正则表达式有一个更为综合和深刻的认识,我将一些关键点 ...

  3. php正则替换url,用正则表达式替换url参数

    这次给大家带来用正则表达式替换url参数,用正则表达式替换url参数的注意事项有哪些,下面就是实战案例,一起来看一下. 具体代码如下所示:/* 定义替换对象键值 */ var setReferArgs ...

  4. g++默认参数_C ++默认参数| 查找输出程序| 套装2

    g++默认参数 Program 1: 程序1: #include <iostream> using namespace std; int K = 10; int fun() { retur ...

  5. g++默认参数_C ++默认参数| 查找输出程序| 套装1

    g++默认参数 Program 1: 程序1: #include <iostream> using namespace std; int sum(int X, int Y = 20, in ...

  6. 正则表达式中/i,/g,/ig,/gi,/m的区别和含义

    正则表达式中/i,/g,/ig,/gi,/m的区别和含义 /i (忽略大小写) /g (全文查找出现的所有匹配字符) /m (多行查找) /gi(全文查找.忽略大小写) /ig(全文查找.忽略大小写 ...

  7. gcc/g++ 的参数总结(二)

    gcc 参数总结 如果是 c++,直接将 gcc 改为 g++ 即可. 1. gcc 编译流程 预处理,Pre-Processing:gcc -E test.c -o test.i //.i文件 编译 ...

  8. linux 正则表达式 视频教程,30分钟带你玩转正则表达式

    定义: 正则表达式说白了就是有普通字符.以及特殊字符组成的文子模式.{匹配模式标准} 正则表达式将会作为一个模板与所搜索的字符串进行匹配.可以让使用者轻易达到搜寻/删除/取代某些特定字符的处理程序.此 ...

  9. dreamweaver 正则表达式为属性值加上双引号_Python正则表达式(一)

    Python正则表达式 正则表达式是处理字符串的强大工具,拥有独特的语法和独立的处理引擎. 我们在大文本中匹配字符串时,有些情况用str自带的函数(比如find, in)可能可以完成,有些情况会稍稍复 ...

最新文章

  1. 周志华:“数据、算法、算力”人工智能三要素,在未来要加上“知识”| CCF-GAIR 2020...
  2. 微软复活20年前生产力工具PowerToys,填补Wind10缺失功能,开源且免费
  3. [Python]再学 socket 之非阻塞 Server
  4. FM之RKD_WORD_WRAP
  5. cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁
  6. OA选型 寻找应用中的个性
  7. Java中的static静态代码块
  8. RHQ指标的WildFly子系统
  9. Mathematica颜色系,你喜欢哪一个?
  10. qnap自带有mysql吗_关于威联通QNAP NAS应用—Container Station 容器套件
  11. mysql常用监控脚本命令列表
  12. c++频繁读取数据会丢失_AMADA数控冲床255参数丢失故障
  13. XRD如何分析残余应力
  14. 方法重写与方法重载的区别
  15. webaudio ajax,Web Audio 入门之读取左右声道数据
  16. cdr宏教程_coreldraw
  17. Understanding unsupervised domain adaption
  18. c++primer plus 第六版 第六章重点内容总结 以及编程题答案
  19. spark sql uv_使用Spark Streaming SQL进行PV/UV统计-阿里云开发者社区
  20. java Excel导出功能之 不固定列表格

热门文章

  1. java两个线程同时运行_Java实现的两个线程同时运行案例
  2. 速算C语言程序设计,C语言程序设计课程设计-速算24.doc
  3. golang json转结构体中嵌套多个数组_ElasticSearch第六篇:复合数据类型-数组,对象...
  4. windows 远程访问别人的linux下的ftp服务器,linux与windows之间使用ftp相互访问(CentOS提示ftp:command not found)...
  5. 查服务器的作用有哪些,云服务器优点和功能有哪些,可以看看这些或许你会明白...
  6. sap 导出系统所有的单位_物流单条码识别系统
  7. string 日期比较_java8-新的日期API
  8. OpenNI框架介绍
  9. AprilTag中的g3d.h和g2d.c文件
  10. python 发布到linux_Linux(CentOS)下的Python3部署流程