假设我有以下字符串:
/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+)))/
但它没有用。
答案 0 :(得分:2)
使用否定字符类匹配任何字符但不匹配空格或/
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))
});

答案 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)