一个正则匹配奇怪的问题?

先上代码:

if(/(\module\/(?:.+[^\.html]))/.test("./src/module/comment/comment.html")){
    console.log(RegExp.$1) //module/comment/commen
}

if(/(\module\/(?:.+[^\.js]))/.test("./src/module/comment/comment.js")){
    console.log(RegExp.$1) //module/comment/comment
}

从上面的输出可以看到我只是将代码中的html换成js输出就不一样了,按理说这两段代码不都是应该输出module/comment/comment吗,为何输出就不一样了?

下面这段代码也是一样的问题:

if(/(\module\/(?:.+[^\.html]))/.test("./src/module/comment/details.html")){
    console.log(RegExp.$1) //module/comment/details
}

if(/(\module\/(?:.+[^\.js]))/.test("./src/module/comment/details.js")){
    console.log(RegExp.$1) //module/comment/detail
}

不都是应该输出/module/comment/details吗?

阅读 1.4k
1 个回答

[^]反向匹配
[^abc] 匹配非abc一个字符
/[^js]+/.test('as') 匹配到a 不会匹配s
[^\.html]匹配非 . h t m l 一个字符 比如a,b,e都通过 t不通过 并不是匹配非.html这5个连起来的词
所以你的第一个./src/module/comment/comment.html 匹配到了t所以匹配结束
其他的类似

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题