正则表达式不包括子模式

时间:2012-03-06 09:45:44

标签: javascript regex

我有一些代码可以匹配一个非常简单的字符串模式: XXnnnnnnnnn (2 alphanumeric, 9 numeric)

我正在使用这个正则表达式: \w{2}\d{9}

现在我需要通过匹配任何以常量标记“AY”开头的字符串以及任何包含11个重复字符的字符串(例如“11111111111”或“00000000000 “)。

如何使用正则表达式排除子模式?

2 个答案:

答案 0 :(得分:5)

试试这个

\b(?!AY)(?!(\w)\1{10})\w{2}\d{9}\b

here on Regexr

基本上我只在你的正则表达式中添加\b word boundaries以避免部分匹配。

您的限制是通过使用否定先行断言来实现的。

(?!AY)如果模式以“AY”

开头,则断言失败

(?!(\w)\1{10})如果第一个单词字符再重复10次,则断言失败。

Lookaround assertions on regular-expressions.info

答案 1 :(得分:2)

您可以使用零宽度前瞻匹配器来排除这两种情况。

不匹配AY很容易:

 (?!AY)

不匹配11个相同的字符更难。您需要使用后引用(这意味着正则表达式不再是严格规则),或者您可以明确匹配每个数字。

(?!0{11}|1{11}|2{11}|…|9{11})  // 11 zeros, or 11 ones, or 11 twos, …
(?!(.)\1{10})  // A character, followed by itself 10 more times.

这样就可以制作完整的正则表达式:

(?!AY)(?!(.)\1{10})\w{2}\d{9}