假设我有以下字符串:
/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)