Javascript 正则表达式 |构造 - 可能的不一致

标签 javascript regex

也许我不理解某些东西,但有人可以向我解释为什么以下代码的行为方式是这样的:

/^[1-9]\d*(\.\d{2})?$/.test('0.50') === false;
/^\.\d+$/.test('0.50') === false;
/^([1-9]\d*(\.\d{2})?)|(\.\d+)$/.test('0.50') === true; // <-- WTF?

这是怎么回事?如您所见,第三个表达式由 | 运算符连接的前两个表达式组成。由于每个测试都是 false,所以不是 false |假==假?还是我缺少正则表达式的基本概念?

我已经在浏览器和 nodejs 中试过了。无论哪种方式,结果都是一样的。

最佳答案

这是因为运算符的优先级。

您的表达式是 ^[1-9][0-9]*(\.\d{2})?\.\d+$

如果您执行以下操作:

/^([1-9][0-9]*(\.\d{2})?)$|^(\.\d+)$/.test('0.50')

如您所愿,您将得到 false

(注意边界处额外的 $ 和 ^)。

更多细节:在最后一个表达式的第二部分中,您不再需要 . 作为第一个字符。

关于Javascript 正则表达式 |构造 - 可能的不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8405412/

相关文章:

全局范围内的 Javascript 变量提升

javascript - Javascript 循环中的闭包问题

Javascript 替换 href 最后一个斜杠/之后的某些字符

Python列表理解逻辑错误

javascript - 拆分 'VS Teamnames' 字符串的正则表达式

javascript - 在 Blockly 上返回 block

javascript - 因剧本而火三次

javascript - 放大弹出窗口不适用于由数据表创建的按钮

正则表达式:可选,后跟否定前瞻

python - Python 中的正则表达式。不匹配