JavaScript 正则表达式匹配除 / 之外的任何非空格字符



假设我有以下字符串:

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

我想要的是编写一个正则表达式,该正则表达式与除第一部分之外具有两部分的所有 URL 匹配 /user/getMyId .我的期望是它返回除第一个 /user/getMyId 和第三个 URL 之外的所有 URL /user/32324/test

我目前的正则表达式是这样的:

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

但它不起作用。

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

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

演示

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))
});

由于您的异常有限,我建议您创建一个处理/验证异常的正则表达式并使用它来过滤。

通过这种方式,您可以创建异常列表,然后创建动态正则表达式

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)

最新更新