如何使用正则表达式匹配特定长度的单词但不匹配网址?

时间:2016-06-05 18:17:16

标签: regex

适用于

等文字
Save Favorites & Share expressions with friends or the Community.
A full Reference & Help is available in the Library, or watch the video Tutorial.
expressions can start some lines though eventuallys
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
http://regexr.com/foo.html?q=bar
https://mediatemple.net
mediatemple.net

我想选择长度为11位的单词。

我可以用

/\b[a-zA-Z]{11}\b/g

http://regexr.com/3digk

但它也匹配网址

https://mediatemple.net
mediatemple.net

我该如何避免?我使用\ b而不是在行的开头和结尾匹配的空格

3 个答案:

答案 0 :(得分:1)

通过使用否定前瞻,您可以排除在其后面有.something的单词,这将排除任何网址而不会触及句子末尾的单词(即,如果空格位于点后面或新队)。

/\b[a-zA-Z]{11}\b(?!\.[^\s]+)/g

答案 1 :(得分:0)

您可以使用negative look behind expression确保您的匹配前面没有“://”。

答案 2 :(得分:0)

使用(?<!//),这是一个负面的看法,断言前面的字符不是"//"

/(?<!//)\b[a-zA-Z]{11}\b/g

请参阅live demo

如果你想更具体并允许双斜线,例如"foo//elevenchars",你可以使用2个负面外观 - 每个协议一个(看后面必须匹配固定长度):

/(?<!http://)(?<!https://)\b[a-zA-Z]{11}\b/g

请参阅live demo,匹配foo//elevenchars,但不是网址。

相关问题