^(!?\/[a-zA-Z0-9-_]*\/[a-zA-Z0-9-_]*\/[a-zA-Z0-9]{13})$
这个regex
,我想匹配URL
除了那些/something/something/13-character-group
所以如果我做:
/something/something/123456789012
这将匹配
/something/something/1234567890123
这不匹配
很多!
^(!?\/[a-zA-Z0-9-_]*\/[a-zA-Z0-9-_]*\/[a-zA-Z0-9]{13})$
这个regex
,我想匹配URL
除了那些/something/something/13-character-group
所以如果我做:
/something/something/123456789012
这将匹配
/something/something/1234567890123
这不匹配
很多!
通过匹配除具有 之外的每个 URL /something/something/13-character-group
,我假设您的输入字符串将在您在问题中提到的字符之前和之后包含字符。
(?! ... )
首先要注意的一点:使用(而不是!?
因为这意味着 1 个!
字符或没有)调用了一个否定的前瞻。然后,要在 URL 中的任何位置查找此字符串,您必须.*
在模式之前使用 a 并在模式之后使用单词边界:
^(?!.*/[a-zA-Z0-9-_]*/[a-zA-Z0-9-_]*/[a-zA-Z0-9]{13}\b).+$
最后.+
是匹配实际的 URL。
这应该工作!
var str1 = '/something/something/123456789012';
var str2 = '/something/something/1234567890123';
var re = /^(\/[a-zA-Z0-9-_]+\/[a-zA-Z0-9-_]+\/(?![a-zA-Z0-9]{13}$)[a-zA-Z0-9]+)$/;
alert(re.test(str1));
alert(re.test(str2));
它看起来像这样。
图片来自Regexper.com