JavaScript正则表达式匹配任何非空白字符,除了/

时间:2017-11-06 05:29:43

标签: javascript regex

假设我有以下字符串:

/user/getMyId
/user/2423432
/user/32324/test
/user/32432232432
/user/sdafdsafdasfsda
/user/sdafdsafdasfsda?filter=sdafdsaf

我想要的是编写一个正则表达式,该正则表达式匹配除了第一个/user/getMyId之外的两个部分的所有URL。 我的期望是返回所有网址,但前一个/user/getMyId除外,第三个/user/32324/test

我目前的正则表达式如下:

/(:?(\/user\/(?!(getMyId))(\S+)))/

但它没有用。

2 个答案:

答案 0 :(得分:2)

使用否定字符类匹配任何字符但不匹配空格或/

string.match(/^\/user\/(?!getMyId)[^\/\s]*$/m)

DEMO



var data = [
  "/user/getMyId",
  "/user/2423432",
  "/user/32324/test",
  "/user/32432232432",
  "/user/sdafdsafdasfsda",
  "/user/sdafdsafdasfsda?filter=sdafdsaf",
  "/user/sdafdsafdasfsda?filter=sdaf dsaf"
]
var regex = /^\/user\/(?!getMyId)[^\/\s]*$/m;
data.forEach(function(str){
  console.log(str, regex.test(str))
});




答案 1 :(得分:0)

由于您的例外有限,我建议您制作一个处理/验证异常并使用它进行过滤的正则表达式。

这样您就可以创建例外列表,然后创建动态正则表达式



var data = [
  "/user/getMyId",
  "/user/2423432",
  "/user/32324/test",
  "/user/32432232432",
  "/user/sdafdsafdasfsda",
  "/user/sdafdsafdasfsda?filter=sdafdsaf"
];
var exceptions = ['getMyId', 'test']
var regex = new RegExp('/' + exceptions.join('|'));
data.forEach(function(str){
  console.log(str, regex.test(str))
});

var result = data.filter(x=> !regex.test(x));
console.log(result)