javascript - 为什么这个正则表达式返回匹配?

标签 javascript node.js

http://jsfiddle.net/sqee98xr/

var reg = /^(?!managed).+\.coffee$/
var match = '20150212214712-test-managed.coffee'.match(reg)
console.log(match) // prints '20150212214712-test-managed.coffee'

我只想在字符串中不存在单词“managed”时才匹配正则表达式 - 我该怎么做?

最佳答案

负前瞻很奇怪。您必须匹配的不仅仅是要查找的单词。这很奇怪,我知道。

var reg = /^(?!.*managed).+\.coffee$/

http://jsfiddle.net/sqee98xr/3/

编辑: 看来我真的用“奇怪的”描述符和外行描述来激怒某些人。这很奇怪,因为从表面上看,术语“负面前瞻”意味着“向前看并确保这些括号中的内容不在那里,然后返回并继续匹配”。作为正则表达式的爱好者,我仍然宣称这个命名很奇怪,尤其是对于第一次使用断言的用户。对我来说,将其视为“非”运算符比实际向前爬行并“向前看”的运算符更容易。为了使行为类似于实际的“向前看”,您必须匹配搜索词之前的所有内容,因此 .*.

一个更简单的解决方案是删除字符串开头 (^) 断言。同样,对我来说,将 ?! 理解为“不”更容易。

var reg = /(?!managed).+\.coffee$/

关于javascript - 为什么这个正则表达式返回匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487838/

相关文章:

javascript - 无法隐藏包含特定文本的链接

javascript - Ajax /JS : Echoing value of a div without page refresh or button click

javascript - 如何将查询翻译为 Sequelize ?

javascript - Socket.io - 监听器必须是 socket.io 事件上的函数

javascript - 日期变量函数以 dd/mm/yyyy 格式包含在未来 x 天之前的 Selenium IDE 中

javascript - Safari 第 3 方 cookie iframe 技巧不再有效?

javascript - Visual Studio 代码中未检测到 Eslint 样式指南

javascript - 在 expressjs 中渲染 jade 文件

node.js - npmpublish 命令是否提交更改?

javascript - 变量id未在moongoose函数NODE JS外部定​​义