js正则RegExp使用g全文扫描匹配多项模式的坑
2016-08-03 12:08
393 查看
数据是这样:
简山尼,13591773474;多遥山伯,13591773474;周玉兰,13000000004;陈雪梅,13901193472;张可高,13900139000;
代码如下:
使用站长工具(网址:http://tool.chinaz.com/regex)测试,每个都是格式正确的
却总是在第二个匹配出错。原因是在创建正则表达式对象时如果使用了“g”标识符或者设置它了的global属性值为ture时,那么新创建的正则表达式对象将使用模式对要将要匹配的字符串进行全局匹配。在全局匹配模式下可以对指定要查找的字符串执行多次匹配。每次匹配使用当前正则对象的lastIndex属性的值作为在目标字符串中开始查找的起始位置。 lastIndex属性的初始值为0,找到匹配的项后lastIndex的值被重置为匹配内容的下一个字符在字符串中的位置索引,用来标识下次执行匹配时开始查找的位置。如果找不到匹配的项lastIndex的值会被设置为0。
当没有设置正则对象的全局匹配标志时lastIndex属性的值始终为0,每次执行匹配仅查找字符串中第一个匹配的项。可以通过regex.lastIndex来访问在执行匹配相应的lastIndex 属性的值。
所以第二次匹配第二字符串时是以第二个字符串的lastIndex起始的部分开始匹配的,所以会
这里解决很简单,以
简山尼,13591773474;多遥山伯,13591773474;周玉兰,13000000004;陈雪梅,13901193472;张可高,13900139000;
代码如下:
function PatternNumbers(){ var val=$('#numbers').val(); var strs = new Array(); strs = val.split(";"); var pattern="^([\\w|\\u4e00-\\u9fa5]+,(\\d{2,3}-)?0?(13|14|15|18)[0-9]{9})+"; var regex = new RegExp(pattern,"g"); for(var i = 0 ;i <strs.length;i++){ alert(""+i+":"+strs[i]); if(i!=strs.length-1&&!regex.test(strs[i])){ alertInfo("提示","电话格式出错"); return false; } } return true; }
使用站长工具(网址:http://tool.chinaz.com/regex)测试,每个都是格式正确的
却总是在第二个匹配出错。原因是在创建正则表达式对象时如果使用了“g”标识符或者设置它了的global属性值为ture时,那么新创建的正则表达式对象将使用模式对要将要匹配的字符串进行全局匹配。在全局匹配模式下可以对指定要查找的字符串执行多次匹配。每次匹配使用当前正则对象的lastIndex属性的值作为在目标字符串中开始查找的起始位置。 lastIndex属性的初始值为0,找到匹配的项后lastIndex的值被重置为匹配内容的下一个字符在字符串中的位置索引,用来标识下次执行匹配时开始查找的位置。如果找不到匹配的项lastIndex的值会被设置为0。
当没有设置正则对象的全局匹配标志时lastIndex属性的值始终为0,每次执行匹配仅查找字符串中第一个匹配的项。可以通过regex.lastIndex来访问在执行匹配相应的lastIndex 属性的值。
所以第二次匹配第二字符串时是以第二个字符串的lastIndex起始的部分开始匹配的,所以会
这里解决很简单,以
var regex = new RegExp(pattern);创建正则对象,不使用g模式即可
相关文章推荐
- js中使用正则表达式(五)特殊字符、匹配模式、捕获组与反向引用介绍
- JS中正则表达式所缺少的匹配模式(单行模式)
- 第11章 使用正则表达式的模式匹配(一)
- JS中正则表达式只有3种匹配模式(没有单行模式)
- JS学习十二天----正则表达式的模式匹配
- JS正则表达式学习之路:(二)用于模式匹配的String方法
- JS中正则表达式所缺少的匹配模式(单行模式)
- Java/Js下使用正则表达式匹配嵌套Html标签
- 使用正则表达式匹配JS函数代码
- 浅谈php正则表达式中的非贪婪模式匹配的使用
- php正则表达式中的非贪婪模式匹配的使用
- Java/Js下使用正则表达式匹配嵌套Html标签
- Java/Js下使用正则表达式匹配嵌套Html标签
- 使用正则表达式匹配模式(验证电子邮件地址)
- 使用正则表达式的模式匹配
- 使用正则表达式的模式匹配
- JS使用split分割字符串并应用正则匹配
- js正则:匹配一个html的tagname的开始标签,主要是解决包含&lt;&gt;(正则的效率问题建议不使用)
- JavaScript使用RegExp进行正则匹配的方法
- JavaScript权威指南_89_第10章_正则表达式的模式匹配_10.3-RegExp对象