跳到主要内容
CNode

正则表达式取反的问题

问答
Xxggaxlc发布于 11 年前最后回复 11 年前
8212920

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

E
enmoon#811 年前

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

N
nwpuhmz#711 年前

123456

X
xggaxlc#611 年前
L
leapon#511 年前

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

X
x-web#311 年前

@xggaxlc 简单点这样写也可以

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

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

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

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

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

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

X
x-web#111 年前

找'/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。

参与回复

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