javascript正则表达式修饰符之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()的输出结果会有差别。下面的解释摘抄自这篇博客

在创建正则表达式对象时如果使用了“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);
}
时间: 2024-11-08 18:22:15

javascript正则表达式修饰符之global(/g)的使用的相关文章

JavaScript正则表达式修饰符

正则表达式通常用于两个字符串方法: search()方法用于检索字符串中指定的字符串,或检索与正则表达式相匹配的子字符串,并返回子字符串的起始位置. replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子字符串. 正则表达式修饰符 修饰符 可以在全局搜索中不区分大小写: i:执行对大小写不敏感的匹配 g:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) m:执行多行匹配 原文地址:https://www.cnblogs.com/dingyou/p/91

javascript正则表达式修饰符之multiline(/m)的使用

javascript正则表达式有3种修饰符/i./m和/g./i是我们最常用,也是最好理解的,代表正则表达式匹配的时候不区分大小写. var regex = /abc/i; alert(regex.test("aBc"));//true /m代表多行模式multiline,如果目标字符串中不含有换行符\n,即只有一行,那么/m修饰符没有任何意义. var multiline = /abc/m; var singleline = /abc/; //目标字符串不含换行符\n var tar

PHP正则表达式修饰符的种类及介绍

◆i :如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的.◆m:默认的正则开始"^"和结束"$"只是对于正则字符串如果在修饰符中加上"m",那么开始和结束将会指字符串的每一行:每一行的开头就是"^",结尾就是"$".◆s:如果在修饰符中加入"s",那么默认的"."代表除了换行符

php正则表达式修饰符详解

preg_match_all("/(.+)<\/form>/isU" , $string, $result); 这里/ 后面加了 3个修饰符 i 是 不区分大小写的匹配 s 是 带有换行的 匹配 U 是非贪婪模式.匹配最少部分. 修饰符:i :如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的.m:默认的正则开始"^"和结束"$"只是对于正则字符

JavaScript正则表达式-边界符

^:表示字符串开始位置,在多行匹配中表示一行的开始位置. /^\w+/匹配字符串中第一个单词. $:表示字符串结束的位置,在多行匹配中表示一行的结束位置. /\w+$/匹配字符串中最后一个单词. /@.+$/匹配邮箱服务器. str = "Great hope make great man"; str = str.replace(/$/,"!");//在字符串结尾插入需要的字符 \b:表示一个单词(而非字符)边界,也就是单词和空格之间的位置,或者字符(\w)与字符串

JavaScript 正则表达式全面总结

本文适合有 JavaScript 基础 && 面向搜索引擎书写正则的人群. 正则表达式是用于匹配字符串中字符组合的模式.正则表达式的模式规则是由一个字符序列组成的.包括所有字母和数字在内,大多数的字符都是直接按照直接量描述待匹配的字符.除此之外,正则表达式还有其他特殊语义的字符,这些字符不按照特殊含义进行匹配. 创建正则表达式 JavaScript 中的正则表达式用 RegExp 对象表示,有两种创建方式. 1. 直接量语法创建 正则表达式直接量定义为包含在一对斜杠(/)之间的字符. 2.

javascript正则表达式(RegExp)简述

首先我们来思考以下两个个场景 我们使用window操作系统,有时候需要找一个文件,刚刚好这个文件我不知道放哪里去了,这个时候我们该怎么办呢? 我们使用word写论文的时候,不小心将"订价"中的"订"字写成了"定",这时候我们该怎么办呢? 对于第一种情况,我们就会用到系统的文件搜索功能,输入文件的名字,系统就会帮我们找到这个文件的位置. 对于第二种情况,我们会用到软件提供的替换功能,首先查找错误的内容,然后将错误的内容替换成正确的内容. 类似的场景

3 JavaScript正则表达式

正则表达式:Regular(有规则的) Expression 正则表达式是由一个字符序列形成的搜索模式,可用于文本搜索和文本替换 常见于字符串的search和replace方法 var str = "Visit w3cschool"; var n = str.search(/w3cschool/i); /w3cschool:检索字段 /i:不区分大小写 结果为6 正则表达式修饰符: i:执行对大小写不敏感的匹配 g:执行全局匹配 m:执行多行匹配 正则表达式查找范围内的字符: [abc

javascript:正则表达式、一个表单验证的例子

阅读目录 本文内容: 正则表达式: 利用正则表达式进行表单验证的例子: 回到顶部 本文内容: 正则表达式 正则表达式的使用方法 正则表达式的特殊匹配字符 正则表达式修饰符 利用正则表达式进行表单验证的例子 首发日期:2018-05-13 回到顶部 正则表达式: 正则表达式的使用方法: 首先创建正则表达式对象: [正则表达式的字符规则:如果是没有特殊意义的字符,直接写:如果是有特殊意义的,直接写:如果想将特殊意义的字符转成非特殊意义的,前面使用\] 可以通过RegExp对象创建正则表达式对象: v