RegEx在javascript中不使用反斜杠

时间:2015-12-29 23:20:37

标签: javascript jquery regex

我正在尝试使用以下模式验证字符串。 以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:

<input data-val-regexp="^\\d{3}-\\d{2}-\\d{4}$" id="ticketNumber">

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

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

情景2: 如果我使用字符串文字指定regexPattern一切正常。

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

在上述情况下,inputRegex源值为&#34; ^ \ d {3} - \ d {2} - \ d {4} $&#34;

为什么反斜杠会在第二种情况下逃脱,因为它在第一种情况下没有?为了使场景1有效,需要做些什么?

1 个答案:

答案 0 :(得分:5)

因为您正在使用g标记创建正则表达式,所以它会记住它停止的位置并在那里开始匹配,而不是在下次调用test时开始匹配。请参阅Why does Javascript's regex.exec() not always return the same value?