看到一个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

(0)

相关推荐

  • 看到一个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里的正则匹配有一个坑,而且当时很莫名奇妙,一度让我怀疑出现了灵异事件. 下面是踩坑代码 var str=["二七1","二七2","金水","二七3","二七4","二七5"] var reg=new RegExp("二七","g"); for(var i=0;i<str.length;i++){ if(reg.test(str

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

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

  • JS正则替换掉小括号及内容的方法

    正则表达式:\ ( [ ^ \ ) ] * \ ) JS代码: var str="hello(world)"; var nstr = str.replace(/\([^\)]*\)/g,""); 以上这篇JS正则替换掉小括号及内容的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • JS正则替换去空格的方法

    本文实例讲述了JS正则替换去空格的方法.分享给大家供大家参考,具体如下: 在网上找了好久,发现没几个是好用的.自己备份一个省得以后再找. //去左空格; function ltrim(s){ return s.replace( /^/s*/, ""); } //去右空格; function rtrim(s){ return s.replace( //s*$/, ""); } //左右空格; function trim(s){ return rtrim(ltrim(s

  • 详解JS正则replace的使用方法

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

  • JS正则匹配中文的方法示例

    本文实例讲述了JS正则匹配中文的方法.分享给大家供大家参考,具体如下: 需求:使用JS正则的方式将字符串 "[微笑][撇嘴][发呆][得意][流泪]" 中的汉字进行匹配输出. 示例代码: <script> var pattern1 = /[\u4e00-\u9fa5]+/g; var pattern2 = /\[[\u4e00-\u9fa5]+\]/g; var contents = "[微笑][撇嘴][发呆][得意][流泪]"; content = c

  • JS正则子匹配实例分析

    本文实例讲述了JS正则子匹配.分享给大家供大家参考,具体如下: Javascript中,拆分字符串时可以使用string的的split或者substring.但是使用正则会更灵活和准确,这里是一个子匹配的例子,在页面过滤数据时很有用. var reg = /^\[(\d+)-(\d+)\]$/; var str = "[234-45]"; // now, I want the tow data if (reg.exec(str)) { document.write(RegExp.$1

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

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

  • js正则相关知识点专题

    1.JS正则表达式一条龙讲解(从原理和语法到JS正则) http://www.jb51.net/article/110516.htm 2.教你轻松记住JS正则表达式 http://www.jb51.net/article/88838.htm 有没有人像小编一样,学了好几遍正则表达式却还是很懵圈,学的时候老明白了,学完了忘光了.好吧,其实还是练的不够,今天就随我来复习一下这傲娇的正则表达式吧. 3.js正则表达式学习和总结(必看篇) http://www.jb51.net/article/9790

随机推荐