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

看到一个JS正则的题_正则表达式的相关文章

JS 正则 时间验证_正则表达式

复制代码 代码如下: function CheckTime() { var checkValue = new RegExp ("^\[0-2]{1}\[0-6]{1}:\[0-5]{1}\[0-9]{1}:\[0-5]{1}\[0-9]{1}") ; var stControl = document.getElementById("txtStartTime") ; var stValue = stControl.value ; if (stValue == &quo

看到一个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验证‘/human/age’的正则表达式

问题描述 求一个js验证'/human/age'的正则表达式 求一个js验证'/human/age'的正则表达式,谢谢各位大神帮忙

学习正则表达式(js、C#)_正则表达式

js中的正则表达式使用 function myValid() { var errorMsg = ""; var res = true; //拿到要验证的值. var receiveName = $("#receiveName").val();//姓名 var receiveMobile = $("#tMobile").val();//手机号 var validCode = $("#validCode").val();//验证码

比较正宗的验证邮箱的正则表达式js代码详解_正则表达式

fuchangxi的正则: 复制代码 代码如下: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/ 开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-.然后是点"."和单词字符和-的组合,可以有一个或者多个组合. 复制代码 代码如下: <script type="text/javascript"> function isEmail(str){ var reg =

乱象,印迹 正则学习问答_正则表达式

最近有幸在开源中国和51CTO两家网站作为嘉宾参与了于正则表达式的专题问答.在问答过程中,我收集到学习正则表达式过程中的某些普遍问题,在这里专门花一点篇幅来回答 正则表达式是难学的,这不存在疑义.但是我认为,难点也只在语法方面.正则表达式已经有年头了,它(的语法)诞生于上世纪七十年代.那是个怎样的情景?举个简单的例子吧,Unix下的usr.dev等名字,就是那时留传下来的,现在已经有很多人诟病了,usr不是user,dev不是device,难学,也难记.经过这些年的飞速发展,当年的很多问题已经被

Javascript里的两种使用正则的方法_正则表达式

在Javascript里,有两种使用正则的方法,一是创建一个正则表达式的实例,而是使用String对象里的正则表达相关的方法. 正则表达式对象 两种创建方法 var my_regex=/[a-z]+/g;  var my_regex=new ("[a-z]+","g"); 方法 exec(string),对string进行正则处理,并返回匹配结果.  test(string),测试string是否含有匹配结果 字符串对象中的正则 方法 match(pattern) 

DreamWeaver中使用正则技术搜索_正则表达式

复制代码 代码如下: <a href=(\S)+_(\S)+  <a href=$1-$2  <a href=((\S)+\_)+  <a href=($1+\-)+  <a href="(\S)+\_(\S)+"  <a href="(\S)*\_(\S)*"  <a href="(\w)+\_(\w)+"  <a href="(\S*)\_(\S*)"  <a href

正则表达式判断所填入号码的运营商js代码修改版_正则表达式

功能:判断所填入号码的运营商 该函数按照以下标准实现 移动:134-139 151 188 联通:130-132 156 电信:133 189 155 关于这些号段之外的号码查询将提示暂无数据信息 同时由于携号入网的实施导致号码的运营商变化且存在不确定性 本程序只做为正则表达式学习交流使用,可随意传播,但是由该程序造成的错误,作者概不负责! 复制代码 代码如下: <html> <script language="javascript" type="text/