javascript - RegEx 无法在 javascript 中使用反斜杠

标签 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是“^\\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 发挥作用,需要做什么?

最佳答案

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

关于javascript - RegEx 无法在 javascript 中使用反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34520645/

相关文章:

java - 如何在Java中使用RegEx模式检查LinkedIn Web链接?

javascript - blockui 与 angular js 中的 ng-tag-input 库不兼容?

javascript - 如何从打开文件对话框中读取 txt 并使用 javascript (jquery) 将内容加载到文本区域中?

javascript - 我想更改 div 显示/隐藏脚本以使用选择菜单而不是单选按钮

javascript - 使用小书签或某些 jQuery 函数加载脚本

regex - 通过 awk 检索日志模式

javascript - div 之间的下一个上一个导航

javascript - 为什么我无法在 Three.js 中缩放或设置网格的位置?

javascript - 使用克隆的 div 切换类

regex - 使用 sed 删除变量中指定的 IP 地址