我想要一个必须包含字符串且不包含其他字符串的正则表达式。
例如: 网址是:
/news/create
,
/news/5a40778e82264f0d689fc345
/news/5a40824382264f0d689fc347
/news/list
/files
/files/43er778e82264fref32fcre4
我只想获得:
/news/5a40778e82264f0d689fc345
和
/news/5a40824382264f0d689fc347
这意味着网址必须包含/news
,但不应 /news/create
或/news/list
。只需要像/news/:id
这样的新闻详细信息。
其他网址如:/files/xxx
也不应返回。
我怎样才能让正则表达式获得那样的效果?
提前感谢。
答案 0 :(得分:1)
试试这个正则表达式:
/\/news\/(?!create|list).*/
答案 1 :(得分:0)
您可以使用以下正则表达式
/^\/news\/[^a-zA-z]/g
var arr = ['/news/create','/news/5a40778e82264f0d689fc345','/news/5a40824382264f0d689fc347','/news/list','/files','/files/43er778e82264fref32fcre4'];
var result = arr.reduce((r, url) => {
if(/^\/news\/[^a-zA-z]/g.test(url))
r.push(url);
return r;
},[]);
console.log(result);
答案 2 :(得分:0)
一种方法可能是使用正向前瞻来检查/news
正则表达式之后是否至少有一个数字和至少一个小写字符:
^\/news\/(?=.*[a-z])(?=.*\d)[a-z\d]+$
<强>解释强>
^
/news/
(?=.*[a-z])
(?=.*\d)
[a-z\d]+
$
如果要在字符串中找到该模式,可以使用单词边界\b
结束,如:
答案 3 :(得分:0)
部分总结早期的答案;如果不接受有关ID和其他URL段之间差异的一些额外规范,则无法直接解决此问题。答案取决于您希望接受的额外规格:
/^\/news\/[a-z0-9]{24}$/i
/^\/news\/[a-z0-9]{20,}$/i
create
和list
:/^\/news\/(?!create|list)/i
/news/create
)将永远不会包含任何数字:/^\/news\/(?=.*[a-z])(?=.*\d)[a-z\d]+$/i
/^\/news\/(?=.*\d)[a-z0-9]{20,}$/i
)