看到一个JS正则的题

贴出来与大家共勉。

先看一段代码,

<script>

var objReg = /^[a-zA-Z]{1}(:){1}$/gi;

alert(objReg.test("a:"));//返回true

alert(objReg.test("a:"));//返回false

</script>

为什么第二个test会返回false?是不是觉得奇怪。

原因我解答如下:

test实际上与exec方法的执行方法是一致的,只是返回值不一样。test返回的是true or false(如果exec返回的不是null),exec返回的是pattern(匹配)。

而exec的执行过程为:带有g参数时,下次匹配时,自动会跳到lastIndex后的位置,也就是这里的第2个位置。而这个位置与pattern显然不匹配。因此返回false。

解决方法:

(1)

可以不使用g(全局参数)也就是这样-

<script>

var objReg = /^[a-zA-Z]{1}(:){1}$/i;

alert(objReg.test("a:"));//返回true

alert(objReg.test("a:"));//返回true

</script>

(2)

可以用lastIndex=0来还原-

var objReg = /^[a-zA-Z]{1}(:){1}$/gi;

alert(objReg.test("a:"));//返回true

objReg.lastIndex=0;

alert(objReg.test("a:"));//返回true

时间: 2024-11-01 13:07:06

看到一个JS正则的题的相关文章

看到一个JS正则的题_正则表达式

贴出来与大家共勉. 先看一段代码, <script> var objReg = /^[a-zA-Z]{1}(:){1}$/gi; alert(objReg.test("a:"));//返回true alert(objReg.test("a:"));//返回false </script> 为什么第二个test会返回false?是不是觉得奇怪. 原因我解答如下: test实际上与exec方法的执行方法是一致的,只是返回值不一样.test返回的是t

JS正则表达式一条龙讲解(从原理和语法到JS正则)

正则啊,就像一座灯塔,当你在字符串的海洋不知所措的时候,总能给你一点思路:正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,总能帮你一眼识别:正则啊,就像一个手电筒,在你需要找什么玩意的时候,总能帮你get你要的东西... -- 节选自 Stinson 同学的语文排比句练习<正则> 欣赏了一段文学节选后,我们正式来梳理一遍JS中的正则,本文的首要目的是,防止我经常忘记正则的一些用法,故梳理和写下来加强熟练度和用作参考,次要目的是与君共勉,如有纰漏,请不吝赐教,良辰谢过. 本文既然取题

js正则匹配出所有图片及图片地址src的方法

  本文实例讲述了js正则匹配出所有图片及图片地址src的方法.分享给大家供大家参考.具体分析如下: 有很多时候我们需要用到文章里面的图片,而且主要是用到它的图片地址,这个时候我们需要通过正则匹配出图片标签,然后做到我们需要的数据 平时也没怎么用正则,一不学就忘,最近项目需要,然后又去goole了,好乱!一搜一大堆,也不是我想要的,最后把自己留一个已被后用: 实现:通过js正则匹配出所有图片及所有图片地址src. 思路:1.匹配出图片img标签(即匹配出所有图片),过滤其他不需要的字符 从匹配出

js正则表达exec与match的区别说明

 本篇文章主要是对js正则表达exec与match的区别进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用.   最近开发遇到一些需要使用正则表达式,顺便研究一下   正则表达式对象有两个定义方式::    1.第一种定义:   new RegExp(pattern, attributes);如var reg = new RegExp("abc","g&quo

js正则匹配出所有图片及图片地址src的方法_javascript技巧

本文实例讲述了js正则匹配出所有图片及图片地址src的方法.分享给大家供大家参考.具体分析如下: 有很多时候我们需要用到文章里面的图片,而且主要是用到它的图片地址,这个时候我们需要通过正则匹配出图片标签,然后做到我们需要的数据 平时也没怎么用正则,一不学就忘,最近项目需要,然后又去goole了,好乱!一搜一大堆,也不是我想要的,最后把自己留一个已被后用: 实现:通过js正则匹配出所有图片及所有图片地址src. 思路:1.匹配出图片img标签(即匹配出所有图片),过滤其他不需要的字符 从匹配出来的

js 正则之检测素数

原文:js 正则之检测素数 相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题.原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的,我就不啰嗦了.我们来说说 js 如何实现它吧. 先来看看什么是素数,在<质数 - 百度百科>里有详细的说明,而且也说了一些求素数的方法,什么6N+1法等..这些什么算法都不是我们要谈的,我们只说正则. 在那篇文章里给出的正则是 /^1?$|^(11+?)\1+$/其实我觉得完全没必要检测 0 1

javascript-求一个js实现电话号码中间变成星号的代码

问题描述 求一个js实现电话号码中间变成星号的代码 求一个js实现电话号码中间变成星号的代码,在线等 解决方案 substr前后截取下就好了 var t='123456789'; t=t.substr(0, 3) + 'XXXX' + t.substr(t.length - 4); alert(t) 解决方案二: 可以像楼上一样截取字符串,也可以用正则表达式,当然正则的实现也相当与是个截取字符串 只不过会让人感觉高大上一点

js 正则学习小记之NFA引擎

原文:js 正则学习小记之NFA引擎 之前一直认为自己正则还不错,在看 次碳酸钴,Barret Lee 等大神都把正则玩的出神入化后发现我只是个战五渣.  求抱大腿,求大神调教.   之前大致有个印象,正则有很多种引擎,但我根本不知道有哪些引擎. 今天在读<精通正则表达式>才发现有Traditional NFA,POSIX NFA 和 DFA (具体自己百度下吧).可用了这么久的正则,还不知道 js 属于哪一种呢.在<精通正则表达式>里有个简单是方法检测属于哪一种. 用 /nfa|

详解JS正则replace的使用方法_javascript技巧

在讲replace的高级应用之前,我们先简单梳理一下JS正则中的几个重要的知识点,以帮助你对基础知识的回顾,然后再讲解JS正则表达式在replace中的使用,以及常见的几个经典案例.  一.正则表达式的创建 JS正则的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\s+)|(\s+$)","g"); //使用直接字面量创建 var regStr = /(^\s+)|(