当前位置: 首页 > 编程笔记 >

JS正则表达式修饰符global(/g)用法分析

燕青青
2023-03-14
本文向大家介绍JS正则表达式修饰符global(/g)用法分析,包括了JS正则表达式修饰符global(/g)用法分析的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了JS正则表达式修饰符global(/g)用法。分享给大家供大家参考,具体如下:

/g修饰符代表全局匹配,查找所有匹配而非在找到第一个匹配后停止。先看一段经典代码:

var str = "123#abc";
var noglobal = /abc/i;//非全局匹配模式
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
var re = /abc/ig;//全局匹配
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false

可以看到:当使用/g模式的时候,多次执行RegExp.test()的输出结果会有差别。下面的解释摘抄自这篇文章《Javascript中正则表达式的全局匹配模式分析》:

 在创建正则表达式对象时如果使用了“g”标识符或者设置它了的?global属性值为ture时,那么新创建的正则表达式对象将使用模式对要将要匹配的字符串进行全局匹配。在全局匹配模式下可以对指定要查找的字符串执行多次匹配。每次匹配使用当前正则对象的lastIndex属性的值作为在目标字符串中开 始查找的起始位置。lastIndex属性的初始值为0,找到匹配的项后lastIndex的值被重置为匹配内容的下一个字符在字符串中的位置索引,用来标识下次执行匹配时开始查找的位置。如果找不到匹配的项lastIndex的值会被设置为0。当没有设置正则对象的全局匹配标志时lastIndex属性的值始终为0,每次执行匹配仅查找字符串中第一个匹配的项。

可以通过下面这段代码验证lastIndex在/g模式下的表现:

var str = "012345678901234567890123456789";
var re = /123/g;
console.log(re.lastIndex); //输出0,正则表达式刚开始创建
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出4
console.log(re.test(str)); //输出true
console.log(re.lastIndex); //输出14
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出24
console.log(re.test(str)); //输出false
console.log(re.lastIndex); //输出0,没有找到匹配项被重置

上面我们看到了/g模式对于RegExp.test()函数的影响,现在我们看下对RegExp.exec()函数的影响。RegExp.exec()返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

var str = "012345678901234567890123456789";
var re = /abc/;
//exec没有找到匹配
console.log(re.exec(str));//null
console.log(re.lastIndex);//0

var str = "012345678901234567890123456789";
var re = /123/;
var resultArray = re.exec(str);
console.log(resultArray[0]);//匹配结果123
console.log(resultArray.input);//目标字符串str
console.log(resultArray.index);//匹配结果在原始字符串str中的索引

对于RegExp.exec方法,不加入g,则只返回第一个匹配,无论执行多少次均是如此;如果加入g,则第一次执行也返回第一个匹配,再执行返回第二个匹配,依次类推。

var str = "012345678901234567890123456789";
var re = /123/;
var globalre = /123/g;
//非全局匹配
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
//全局匹配
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出4
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出11
console.log(globalre.lastIndex);//输出14

当使用/g匹配模式的时候,我们可以通过循环,获取所有的匹配项。

var str = "012345678901234567890123456789";
var globalre = /123/g;
//循环遍历,获取所有匹配
var result = null;
while ((result = globalre.exec(str)) != null)
{
 console.log(result[0]);
 console.log(globalre.lastIndex);
}

PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript

正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript正则表达式技巧大全》、《JavaScript替换操作技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript中json操作技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

 类似资料:
  • 本文向大家介绍JS正则表达式修饰符中multiline(/m)用法分析,包括了JS正则表达式修饰符中multiline(/m)用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了JS正则表达式修饰符中multiline(/m)用法。分享给大家供大家参考,具体如下: JavaScript正则表达式有3种修饰符/i、/m和/g。/i是我们最常用,也是最好理解的,代表正则表达式匹配的时候不区

  • 主要内容:实例,实例,实例,实例标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。 标记不写在正则表达式里,标记位于表达式之外,格式如下: 下表列出了正则表达式常用的修饰符: 修饰符 含义 描述 i ignore - 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。 g global - 全局匹配 查找所有的匹配项。 m multi line - 多行匹配 使边界字符 ^ 和 $ 匹配

  • 问题内容: 我正在使用orient-db数据库,但是正则表达式模式匹配存在问题。我确实需要在请求中包含不区分大小写的修饰符,但是它不按预期工作。 询问: 以小写形式返回预期的匹配项。 每当我尝试添加修饰符时,即在分隔符之外 我得到一个空的收藏。实际上,只要存在分隔符,查询就会返回一个空集合。 如果没有办法附加修饰符,我可能可以将每个“ alpha”字符替换为方括号中的表达式,即 但是我对这种解决方

  • 但我对修饰语s和m感到困惑。谁能用代码示例来解释s和m之间的区别,说明它是如何不同的?我试着在网上搜索,它只在http://perldoc.perl.org/perlre.html#modifiers链接中给出了解释。在stackoverflow中,我甚至看到有人将s和m一起使用。s不是M的反义词吗? 我无法使用“使用M”匹配多行。

  • 本文向大家介绍JS中正则表达式全局匹配模式 /g用法详解,包括了JS中正则表达式全局匹配模式 /g用法详解的使用技巧和注意事项,需要的朋友参考一下 本文章来详细介绍js中正则表达式的全局匹配模式 /g用法,代码如下: 在创建正则表达式对象时如果使用了“g”标识符或者设置它了的global属性值为ture时,那么新创建的正则表达式对象将使用模式对要将要匹配的字符串进行全局匹配。在全局匹配模式下可以

  • 本文向大家介绍浅谈PHP正则表达式中修饰符/i, /is, /s, /isU,包括了浅谈PHP正则表达式中修饰符/i, /is, /s, /isU的使用技巧和注意事项,需要的朋友参考一下 在学习PHP正则表达式修饰符之前先来理解下贪婪模式,前面在元字符中提到过"?"还有一个重要的作用,即"贪婪模式",什么是"贪婪模式"呢? PHP正则表达式贪婪模式: 比如我们要匹配以字母"a"开头字母"b"结尾的