1
^(!?\/[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这不匹配

很多!

4

2 回答 2

2

通过匹配除具有 之外的每个 URL /something/something/13-character-group,我假设您的输入字符串将在您在问题中提到的字符之前和之后包含字符。

(?! ... )首先要注意的一点:使用(而不是!?因为这意味着 1 个!字符或没有)调用了一个否定的前瞻。然后,要在 URL 中的任何位置查找此字符串,您必须.*在模式之前使用 a 并在模式之后使用单词边界:

^(?!.*/[a-zA-Z0-9-_]*/[a-zA-Z0-9-_]*/[a-zA-Z0-9]{13}\b).+$

最后.+是匹配实际的 URL。

于 2013-08-23T10:30:49.520 回答
2

这应该工作!

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

于 2013-08-23T10:30:26.537 回答