Javascript Regexp测试方法的怪异行为
Javascript Regexp test method weird behaviour
我一直在尝试基于正则表达式计算字符串,但当我多次使用正则表达式进行测试时,我注意到了一种奇怪的行为。测试方法在正确和错误之间交替。检查此代码笔-->http://codepen.io/gpincheiraa/pen/BoXrEz?editors=001
var emailRegex = /^([a-zA-Z0-9_'.'-]){0,100}'@(([a-zA-Z0-9'-]){0,100}'.)+([a-zA-Z0-9]{2,4})+$/,
phoneChileanRegex = /^'+56'S*'s*9'S*'s*'d{8}(?!'@'w+)/g,
number = "+56982249953";
if(!number.match(phoneChileanRegex) && !number.match(emailRegex) ) {
console.log("it's not a phone number or email address");
}
//Weird Behaviour
console.log(phoneChileanRegex.test(number)); --> true
console.log(phoneChileanRegex.test(number)); --> false
来自MDN文档:
与
exec()
(或与之组合)一样,在同一全局正则表达式实例上多次调用的test()
将超过上一个匹配。
因此,第二次调用该方法时,它将在第一个匹配之后(即+56982249953
之后)查找匹配。没有匹配,因为模式被锚定在字符串(^
)的开头(并且因为没有剩余字符),所以它返回false
。
要实现此操作,必须删除g
修饰符。
这是因为test
方法与许多RegExp
方法一样,在与g
标志一起使用时,会尝试在同一字符串中查找多个匹配项。为此,它会跟踪RegExp的lastIndex
属性中应该搜索的位置。如果您不需要查找多个匹配项,请不要放置g
标志。如果您想使用它,请记住在测试新字符串时将regex.lastIndex
设置为0。
阅读有关MDN 上lastIndex
的更多信息
相关文章:
- Sinon-带有回调的存根函数-导致测试方法超时
- AngularJS列出了所有单元测试方法
- Javascript regexp 测试行为与函数
- .done 或 .then 中的茉莉花测试方法
- 如何在 JavaScript 中测试方法而不会出错
- 渲染流星模板时执行的茉莉花测试方法
- 如果“beforeEach”中的代码是异步的,如何在 Jasmine 中测试方法
- 为什么Javascript RegExp测试对此字符的Unicode值给出“false”
- RegExp测试有两个变量:可能
- 返回带有mocha的promise的测试方法调用
- 单元测试——方法中的模拟方法
- Javascript Regexp测试方法的怪异行为
- ReactJS的首选测试方法
- 可以'我不理解javascript String.match(regexp)方法的行为
- JavaScript RegExp:测试和执行
- 在模块上使用sinon测试方法调用.出口的方法
- 正则表达式测试方法中的“g”如何交替工作
- JavaScript RegExp测试方法工作不稳定,我的意思是第一次执行和第二次执行的结果不同
- Javascript RegExp - 测试方法问题
- RegExp GWT/Javascript的测试方法