当前位置:  开发笔记 > 编程语言 > 正文

RegEx在javascript中不使用反斜杠

如何解决《RegEx在javascript中不使用反斜杠》经验,为你挑选了1个好方法。

我正在尝试使用以下模式验证字符串.以3位数字开头,后跟连字符后跟2位数字,以4位数字结尾.例如:123-45-6789我需要将模式作为字符串变量传递给RegExp对象(我从html元素属性中获取模式值),因此我使用双斜杠转义了RegExp.令我惊讶的是,我看到了奇怪的结果.

var pattern = "^\\d{3}-\\d{2}-\\d{4}$";
var inputRegex = new RegExp(pattern, "g");
console.log(inputRegex.test('132-45-7899')); //True
console.log(inputRegex.test('132-45-7899')); //False
console.log(inputRegex.test('132-45-7899')); //True
console.log(inputRegex.test('132-45-7899')); //False

我在这做错了什么?这种结果不一致的原因是什么?

编辑:现在我理解为什么结果不一致,但我的实际问题仍然没有解决.HTML elem如下所示

情景1:



var regexPattern = input.attr("data-val-regexp");
var inputRegex = new RegExp(regexPattern);
return inputRegex.test('123-45-6789'); // False

当我检查时,inputRegex.source是"^ \\ d {3} - \\ d {2} - \\ d {4} $"

场景2:如果我使用字符串文字分配regexPattern一切正常.

var pattern = "^\\d{3}-\\d{2}-\\d{4}$";
var inputRegex = new RegExp(pattern);
console.log(inputRegex.test('132-45-7899')); //True

在上面的例子中,inputRegex源值是"^\d {3} - \d {2} - \d {4} $"

为什么反斜杠在第二个场景中被转义,而在第一个场景中没有?为了使场景1有效,需要做些什么?



1> Mark Reed..:

因为您正在使用g标志创建正则表达式,所以它会记住它停止的位置并在那里开始匹配,而不是在下次调用时开始匹配test.请参阅为什么Javascript的regex.exec()并不总是返回相同的值?.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有