`
zkq
  • 浏览: 1831 次
  • 性别: Icon_minigender_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域中是这样的。

 

分享到:
评论

相关推荐

    超经典正则表达式测试工具

    2. **常用表达式方法使用**:工具可能集成了常见的正则表达式操作,如查找、替换、分割等,让用户能够在实际操作中熟悉这些方法。 3. **测试字符串的字节数**:在处理字符编码问题时,了解字符串的字节数是非常有用...

    pb 使用正则表达式源码pbregexp

    标题中的“pb 使用正则表达式源码pbregexp”指的是在PowerBuilder(简称pb)环境中,利用名为“pbregexp”的正则表达式组件来实现源代码级别的正则表达式操作。PowerBuilder是一款流行的可视化的、面向对象的软件...

    Oracle正则表达式详解(用法+实例)

    Oracle 10g 引入了一系列新的函数来支持正则表达式的使用,包括 `REGEXP_LIKE`、`REGEXP_INSTR`、`REGEXP_SUBSTR` 和 `REGEXP_REPLACE`。这些函数的使用方式类似于传统的 SQL 函数 `LIKE`、`INSTR`、`SUBSTR` 和 `...

    强大的正则表达式生成工具 C#版

    6. **教程和文档**:提供详细的正则表达式使用指南和C# API参考,帮助用户学习和理解正则表达式。 7. **版本控制**:保存和加载正则表达式模式,便于项目管理。 8. **错误检查**:检测并提示正则表达式中的语法...

    js_正则表达式全攻略

    **解决方案**:使用正则表达式 `/\d+$/g` 进行匹配。 - `\d` 表示匹配任意数字。 - `+` 表示匹配前面的元素一次或多次。 - `$` 表示匹配字符串的结尾。 - `g` 是全局匹配标志,表示在整个字符串范围内查找所有匹配...

    源码(精通正则表达式&实战正则表达式)

    此外,JavaScript提供了`test()`、`match()`、`replace()`、`search()`和`split()`等方法,与正则表达式配合使用,完成各种字符串操作。 总之,通过这个资源,学习者不仅可以系统地学习正则表达式的理论知识,还能...

    经典JavaScript正则表达式实战

    在JavaScript中,可以使用正则表达式/\d+$/g来实现。这个表达式可以找到字符串中最后一个数字序列,例如在字符串"30CAC0040"中,它会匹配到数字40。 其次,统一空格个数也是一个常见需求。可以利用正则表达式/\s+/g...

    C#字符串和正则表达式参考手册

    7. 修饰符:正则表达式模式可以包含修饰符,如`i`忽略大小写,`g`全局匹配,`m`多行模式等。 8. 常见模式:包括数字`\d`,非数字`\D`,空白`\s`,非空白`\S`,单词`\w`,非单词`\W`等,以及边界匹配符如`^`(行首)...

    正则表达式教程合集(各种语言的,超全)

    使用`RegExp`对象来处理正则表达式,其中包含`Pattern`属性来设置模式,`Execute`方法来执行匹配,以及`Global`和`IgnoreCase`属性来控制匹配行为。 .NET框架提供了`System.Text.RegularExpressions`命名空间,包含...

    正则表达式(基本包含所有验证的正则)

    ### 正则表达式知识点详解 ...本文通过多个具体的示例介绍了正则表达式的使用方法及其应用场景,希望能帮助读者更好地理解和掌握这一工具。在未来的工作中,合理地运用正则表达式可以极大地提高工作效率和质量。

    Source Insight_正则表达式举例

    ### 正则表达式在Source Insight中的...以上是Source Insight中正则表达式的一些基本应用实例,通过对这些例子的理解,可以帮助开发者更好地掌握正则表达式的使用方法,并在实际的开发工作中高效地进行文本匹配和处理。

    正则表达式在程序开发中的应用

    本文将详细介绍正则表达式的基本概念及其在程序开发中的应用场景,并通过具体的例子来展示其使用方法。 #### 一、正则表达式简介 正则表达式是一种由普通字符(例如字符 `a` 与数字 `5`)和特殊字符(称为元字符)...

    精通正则表达式05

    6. **模式修饰符**:学习如何使用全局`g`、忽略大小写`i`和多行`m`等修饰符改变正则表达式的匹配行为。 7. **正则表达式的实例分析**:通过实际案例解析,演示如何解决常见的文本处理问题,如邮箱验证、URL提取等。...

    JS正则表达式大全【6】

    而通过正则表达式,我们可以使用一行代码`String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }`就完成同样的功能,这展示了正则表达式的高效性。 接着,文章展示了如何使用正则...

    正则表达式素材5

    《正则表达式入门经典》是一本由(美)瓦特编著的教材,书中详细介绍了正则表达式的语法和用法,包括基础的字符匹配、量词、分组、选择与分支、位置匹配等核心概念。此外,书中可能还涵盖了高级特性,如回溯、预查、...

    正则表达式帮助文档(正则表达式)

    - 在正则表达式中,一些特殊字符如`(`、`)`、`.`、`*`等需要使用`\`进行转义,以便进行字面值匹配。 4. **分组与反向引用**: - `(pattern)`用于创建一个捕获组,可以对一组字符进行操作,如重复、或操作等。 - ...

    JavaScript正则表达式匹配 div style标签

    在这个例子中,我们使用了正则表达式的全局匹配标志`g`,表示搜索整个字符串。`[\s\S]*?`是一个非贪婪模式的字符匹配,它匹配任何字符(包括空白字符),尽可能少的次数。当与`<div>`或`<style>`标签的开始和结束相...

    正则表达式学习视频

    1. 使用`test()`、`match()`、`search()`、`replace()`和`split()`等JavaScript字符串方法与正则表达式配合进行文本操作。 2. 使用全局标志`g`进行全局查找,`i`标志忽略大小写,以及`m`标志使^和$匹配行首和行尾。 ...

Global site tag (gtag.js) - Google Analytics