CNode

正则表达式取反的问题

问答
Xxggaxlc发布于11 年前最后回复11 年前8 回复21263 浏览0 收藏

这个正则怎么写可以让出现'/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)

X
x-web#1·11 年前

找'/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
xggaxlc#2·11 年前
引用 x-web找'/test'或者'/test/xxx'的反集 和 匹配它们再对结果取反是一样的吧。 再对结果取反就好了。 ps var re = /[^\/test$]|[^\/test\/]/; []中...

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

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

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

X
x-web#3·11 年前

@xggaxlc 简单点这样写也可以

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

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

L
leapon#5·11 年前

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

X
xggaxlc#6·11 年前
E
enmoon#7·11 年前

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

N
nwpuhmz#8·11 年前

123456

参与回复
登录后即可参与回复。登录