猿问

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

先上代码:


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吗?


天涯尽头无女友
浏览 282回答 1
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所以匹配结束其他的类似
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答