正则表达式(负向前瞻)

时间:2013-08-23 10:14:04

标签: regex negative-lookahead

^(!?\/[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这不符合

Tnx很多!

2 个答案:

答案 0 :(得分: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));

看起来像这样。

regex http://f.cl.ly/items/3G3z2s0n2J3E1J1J2s03/orreMBA%202013-08-23%20kl.%2012.40.14.PNG

来自Regexper.com的图片

答案 1 :(得分:2)

通过匹配除/something/something/13-character-group之外的每个网址,我假设你的输入字符串在你提问的那些之前和之后都有字符。

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

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

最后.+与实际网址相匹配。