正则表达式取反的问题
发布于 9 年前 作者 xggaxlc 20626 次浏览 最后一次编辑是 8 年前 来自 问答

这个正则怎么写可以让出现’/test’或者’/test/xxx’之类的字符串返回false?

var re = /[^\/test$]|[^\/test\/]/;
console.log(re.test('/test'));  //false
console.log(re.test('/test/')); //false
console.log(re.test('/test/1'))  //true ???
8 回复

找’/test’或者’/test/xxx’的反集 和 匹配它们再对结果取反是一样的吧。

re = /^\/(?:test$|test\/.)/
re.test('/test')  // true
re.test('/test/')  // true
re.test('/test/x')  // true

再对结果取反就好了。

ps

var re = /[^/test$]|[^/test/]/;

[]中$符没有以…结尾的含义了,就是匹配i一个$,而且是字符集的任一个。 你写/[^/test$]/表示匹配的字符串仅含有 ‘t’ , ‘e’ , ‘s’ , ‘\’ , ‘$’ 时返回false。

@x-web 谢谢 正则应该是这样么

/^\/(?:test$|test\/)/

但是如果不想取反(譬如用在路由匹配里面) 非要用正则应该怎么写啊?

@xggaxlc 简单点这样写也可以

/^\/test(?:$|\/)/

想直接求反集的话,我也不会写啦~~ 坐等大神解答。

@x-web 谢谢 ! 求个大神搭救!

在路由里,把你的函数放在route的最后处理,捡漏就可以了

@leapon 谢谢 好吧 也只能这么干了

var re = !/\/test(\/[^/]*)?$/;

回到顶部