正则表达式的全局匹配模式

首先,要明确一点,所有的正则表达式都有一个lastIndex属性,用于记录上一次匹配结束的位置。如果不是全局匹配模式,那lastIndex的值始终为0,在匹配过一次后,将会停止匹配。

正则表达式的全局匹配模式,就是在创建正则表达式的时候使用g标识符或者将global属性设置为true,在全局匹配模式下,正则表达式会对指定要查找的字符串执行多次匹配。每次匹配使用当前正则对象的lastIndex属性的值作为在目标字符串中开始查找的起始位置。如果找不到匹配的项lastIndex的值会被重新设置为0。

理解了上面的话,下面代码的结果就很清晰了:

 1 var regex = /abc/g;
 2 var str = ‘123#abc‘;
 3 console.log(regex.lastIndex);   // 0
 4 console.log(regex.test(str));   // true
 5 console.log(regex.lastIndex);   // 7
 6 console.log(regex.test(str));   // false
 7 console.log(regex.lastIndex);   // 0
 8 console.log(regex.test(str));   // true
 9 console.log(regex.lastIndex);   // 7
10 console.log(regex.test(str));   // false

今天在写表单验证的时候遇到一个问题,每当偶数次点击的时候就会报错,就是这个问题造成的,解决方法也很简单,就是去掉正则表达式里面的g。

关于RegExp.prototype.exec(str)方法和String.prototype.math(rgExp)方法:

RegExp.prototype.exec(str)方法返回NULL或返会一个数组,在数组的第0个元素存放的是在字符串str中查找到的匹配内容,1到n个元素返回的是在模式中使用括号"()"指定的子匹配项的内容。

在没有使用全局标志时String.prototype.math(rgExp)方法和RegExp.prototype.exec(str)的行为类 似。当设置了全局匹配标志时String.prototype.math(rgExp)方法返回的数组项元素0到n中包含了所有匹配到的项不包含子匹配 项。这时可以使用RegExp.$1..$9获取9个子匹配。

时间: 2024-08-14 00:21:10

正则表达式的全局匹配模式的相关文章

【Python3 爬虫】09_正则表达式(re.math()、re.search()、re.sub()、全局匹配函数)

re.math()函数 从源字符串的起始位置匹配一个模式 语法:re.match(pattern, string, flag) 第一个参数代表对应的正则表达式,第二个参数代表对应的源字符,第三个参数是可选参数,代表对应的标志位,可以放模式修正符等信息 #-*- codingn:utf-8 -*- import re string = "ipythonajsoasaoso" pattern = ".python." result = re.match(pattern,

正则表达式中\{\} --匹配模式出现的次数

正则表达式: \{\}    匹配字符出现的次数 使用*可匹配所有匹配结果人一次,但如果只要制定次数,就应该使用\{\},此模式有三种形式. pattern\{n\}         匹配模式出现n次 pattern\{n,\}        匹配模式出现最少n次 pattern\{n,m\}         匹配模式出现n到m次,n,m分别为0-255之间的任意整数 例: A\{2\}B      匹配值为AAB A\{4\}B        匹配值为AAAAB或者AAAAAAB,但是不能为A

正则表达式的3种匹配模式

正则表达式是处理字符串的常用工具.在c#中,我们一般使用regex类来表示一个正则表达式.一般正则表达式引擎支持以下3种匹配模式:单行模式(singleline).多行模式(multiline)与忽略大小写(ignorecase). 1. 单行模式(singleline)msdn定义:更改点 (.) 的含义,使它与每一个字符匹配(而不是与除 \n 之外的每个字符匹配).使用单行模式的典型场景是获取网页源码中的信息.示例:我们使用webbrowser控件,从http://www.xxx.com/1

SQL中常用模糊查询的四种匹配模式&&正则表达式

执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请运用两个百分号(%%)表示.比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来.另外,如果须要找出u_name中

正则表达式中常用的模式修正符有i、g、m、s、x、e详解

正则表达式中常用的模式修正符有i.g.m.s.x.e等.它们之间可以组合搭配使用. 它们的作用如下: //修正符:i 不区分大小写的匹配; //如:"/abc/i"可以与abc或aBC或ABc等匹配; //修正符:g表示全局匹配 //修正符:m 将字符串视为多行,不管是那行都能匹配; 例://模式为:$mode="/abc/m"; //要匹配的字符串为:$str="bcefg5e\nabcdfe" //注意其中\n,换行了;abc换到了下一行;

全局匹配KMP算法

KMP算法是通过分析模式字符串,预先计算每个位置发生不匹配的时候,所需GOTO的下一个比较位置,整理出来一个next数组,然后在上面的算法中使用. 本全局匹配KMP算法针对串的堆式存储数据结构 # define MAXSIZE 45 //固定next数组的长度 # define OK 1 # define ERROR 0 typedef int Status; //返回状态 //存放匹配字符串的位置 int indexArray[MAXSIZE] = {0}; //记录匹配字符串出现的次数 in

正则表达式默认是贪婪模式

regex的---------------------正则表达式默认是贪婪模式,优先级|不高 没有^高因为.+要尽可能多的匹配.所以会认为1111.1 1. 111.111111.都是.+匹配的结果,但是由于正则表达式中最后还有一个 : . ,所以如果要是将.+匹配了所有的字符,则最后的 . (句号)无法找到匹配,正则表达式会尽可能的找到匹配,所以会将 .(句号)尝试给正则表达式中的最后一个字符(句号)来匹配,然后把前面的所有字符都用.+:来匹配.---------------------?功能

shell 正则表达式与文件名匹配

1) . : 匹配任意单ASCII 字符,可以为字母,或为数字.2) 举例: ..XC..匹配deXC1t.23XCdf等,.w..w..w.匹配rwxrw-rw-行首以^匹配字符串或字符序列1) ^ : 允许在一行的开始匹配字符或单词.2) 举例: ^.01 匹配0011cx4.c01sdf 等,^d 匹配drwxr-xr-x.drw-r--r--等 行尾以$匹配字符串或字符 1) $ : 在行尾匹配字符串或字符,$符号放在匹配单词后.2) 举例: trouble$ 匹配以单词trouble结

SQL中常用模糊查询的四种匹配模式

执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请运用两个百分号(%%)表示.比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为"张三","张猫三"."三脚猫","唐三藏&